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)
#  }
#}