Php 如何检查此数组中的唯一键和值
如何获得作为唯一键值的输出。我需要删除重复的值。 我需要这样的订单Php 如何检查此数组中的唯一键和值,php,multidimensional-array,Php,Multidimensional Array,如何获得作为唯一键值的输出。我需要删除重复的值。 我需要这样的订单 Array ( [0] => Array ( [2] => 3 ) [1] => Array ( [12] => 32 ) [2] => Array ( [2] => 3 ) [3] => Array ( [24] => 42 ) ); 您可以使用函数array\u unique 用这个。这将在新数组中存储所有不
Array (
[0] => Array ( [2] => 3 )
[1] => Array ( [12] => 32 )
[2] => Array ( [2] => 3 )
[3] => Array ( [24] => 42 )
);
您可以使用函数
array\u unique
用这个。这将在新数组中存储所有不同的键/值对
foreach ($myMultiArray as $index => $doublonArray) {
$myMultiArray[$index] = array_unique($doublonArray);
}
输出:
$test = array(
array(2 => 3),
array(12 => 32),
array(2 => 3),
array(24 => 42)
);
$tmpArray = array();
$newArray = array();
foreach ($test as $elements) {
foreach ($elements as $key => $val) {
if (!array_key_exists($key, $tmpArray) || $tmpArray[$key] !== $val) {
$tmpArray[$key] = $val;
}
}
}
foreach ($tmpArray as $key => $val) {
$newArray[] = array($key => $val);
}
var_dump($newArray);
$array = array(
array(2 => 3),
array(12 => 32),
array(2 => 3),
array(24 => 32)
);
echo 'before array_unique_multi:' . "\n";
print_r($array);
echo 'after array_unique_multi:' . "\n";
print_r(array_unique_multi($array));
function array_unique_multi($array)
{
$hashAry = array();
foreach($array as $k=>$v){
$hash = md5(serialize($v));
if(in_array($hash, $hashAry)) unset($array[$k]);
else $hashAry[]=$hash;
}
$array = array_values($array);
return $array;
}
这是我的结果
$check_arr = Array (
[0] => Array ( [13] => 1 )
[1] => Array ( [13] => 3 )
[2] => Array ( [13] => 1 )
[3] => Array ( [10] => 3 )
) ;
print_r(array_unique($check_arr));
试试这个:
Array ( [0] => Array ( [13] => 1 ) );
输出:
$test = array(
array(2 => 3),
array(12 => 32),
array(2 => 3),
array(24 => 42)
);
$tmpArray = array();
$newArray = array();
foreach ($test as $elements) {
foreach ($elements as $key => $val) {
if (!array_key_exists($key, $tmpArray) || $tmpArray[$key] !== $val) {
$tmpArray[$key] = $val;
}
}
}
foreach ($tmpArray as $key => $val) {
$newArray[] = array($key => $val);
}
var_dump($newArray);
$array = array(
array(2 => 3),
array(12 => 32),
array(2 => 3),
array(24 => 32)
);
echo 'before array_unique_multi:' . "\n";
print_r($array);
echo 'after array_unique_multi:' . "\n";
print_r(array_unique_multi($array));
function array_unique_multi($array)
{
$hashAry = array();
foreach($array as $k=>$v){
$hash = md5(serialize($v));
if(in_array($hash, $hashAry)) unset($array[$k]);
else $hashAry[]=$hash;
}
$array = array_values($array);
return $array;
}
可能是为此目的而设计的:
before array_unique_multi:
Array
(
[0] => Array
(
[2] => 3
)
[1] => Array
(
[12] => 32
)
[2] => Array
(
[2] => 3
)
[3] => Array
(
[24] => 32
)
)
after array_unique_multi:
Array
(
[0] => Array
(
[2] => 3
)
[1] => Array
(
[12] => 32
)
[2] => Array
(
[24] => 32
)
)
如果同一个键有两个不同的值怎么办?到目前为止您尝试了什么?另外,您将什么分类为重复值?键或值或两者?我只需要删除重复的键和值
array\u unique
在多维数组上不起作用。谢谢Barmar先生,我得到了unique key和value的结果,非常感谢。您的代码在输出时只将多个数组串联在一个数组中。松开多维。不固定,将始终创建“一项”数组。如果没有重复的值会发生什么情况?=>您将在单个数组中包含每个值,因此销毁原始结构。如果没有重复值,则结果相同。这是删除重复项的OP请求。如果您有两个唯一值行,而不是一个唯一值行,则测试代码会发生什么。我的代码所做的是创建一个tmp数组,并检查是否有一个数组键作为子数组键,如果没有,则什么也不做,如果有,则检查该值,并且该值是否与给定的键相同。很清楚。然后转换回所需的格式。你不懂什么,或者我不懂什么?谢谢Glambert先生,我得到了唯一数组键值的结果。我想这就是你想要的?
$a = [ [ 2 => 3 ], [ 3 => 4 ], [ 3 => 15 ], [ 2 => 3 ] ];
array_reduce($a, function($memo, $el) {
if(false === array_search($el, $memo)) array_push($memo, $el);
return $memo;
}, array())
#⇒ array(3) {
# [0] =>
# array(1) {
# [2] =>
# int(3)
# }
# [1] =>
# array(1) {
# [3] =>
# int(4)
# }
# [2] =>
# array(1) {
# [3] =>
# int(15)
# }
#}