2016-02-23 3 views
0

У меня есть пустой массив, когда я сравниваю два массива, у которых есть другой ключ, но такое же значение. Пример: идентификатор имеет такое же значение, как ууСравнение двух массивов php array_diff

$o = array('id'=>2,'name'=>'D','yy'=>12); 
$n = array('id'=>12,'name'=>'D','yy'=>12); 

Что я хочу:

$a = array('id'=>12,'id'=>2); 
+0

хорошо вы можете получить оба значения id в этом массиве, вы не можете иметь одинаковые ключи в том же массиве, хотя – Ghost

+0

Эта функция array_diff() сравнивает значения нескольких массивов, и возвращает массив, содержащий записи из первого массива , которые являются не присутствуют в другом массиве. , поэтому с помощью этой функции вы не можете получать значения из обоих массивов. –

ответ

1

Вы можете использовать array_merge_recursive() - (PHP 4 >= 4.0.1, PHP 5, PHP 7)

От PHP Manual:

array_merge_recursive - Слияние двух или более массивов рекурсивно

<?php 

$a = array('id'=>2,'name'=>'D','yy'=>12); 
$b = array('id'=>12,'name'=>'D','yy'=>12); 

$result = array_merge_recursive($a, $b); 

$newArr = $result['id']; // get ID index. you can also get other indexes. 

echo "<pre>"; 
print_r($newArr); 

?> 

Результат:

Array 
(
    [0] => 2 
    [1] => 12 
) 

Обратите внимание, что: вы не можете использовать то же имя индекса (ID) для этого массива array('id'=>12,'id'=>2);

0

Как уже упоминалось @Ghost, ассоциативную массив не должен иметь одинаковые ключи.
Я предлагаю, чтобы достичь «ожидаемого результата» в порядке «вложенные массивы», используя array_diff_assoc функцию (с omputes различие массивов с дополнительной проверкой индекса):

$o = array('id'=>2,'name'=>'D','yy'=>12); 
$n = array('id'=>12,'name'=>'D','yy'=>12); 

echo "<pre>"; 

$result_nested_arr = [array_diff_assoc($o, $n), array_diff_assoc($n, $o)]; 

var_dump($result_nested_arr); 

// the output: 
array(2) { 
    [0]=> 
    array(1) { 
    ["id"]=> 
    int(2) 
    } 
    [1]=> 
    array(1) { 
    ["id"]=> 
    int(12) 
    } 
} 

http://php.net/manual/en/function.array-diff-assoc.php