2014-10-28 3 views
1

При попытке этого кода, я смущен, почему значение yellow не отображается.Array Diff Confusion

Можете ли вы это уточнить, пожалуйста?

$array1 = array("a" => "green", "red", "blue", "red"); 
    $array2 = array("b" => "green", "yellow", "red"); 
    $result = array_diff($array1, $array2); 

    print_r($result); 

Множественные вхождения в $array1 трактуются одинаково. Этот вывод будет:

Array 
(
    [1] => blue 
) 
+0

Потому что вы спрашиваете: «Что находится в этом массиве ($ array1), который не находится в других» –

ответ

0

Определение

array_diff($array1, $array2); 

является возвращение записей в array1, которые не присутствуют в других массивах. Вы могли бы сделать

$result2 = array_diff($array2, $array1); 

, а затем объединить $result1 и $result2, если вы хотите, чтобы увидеть то, что отсутствует в любой из них.

0

Это происходит потому, что вы ищете разницу между первым и вторым массивом, который является только синим, потому что синий не содержится во втором массиве.

, если вы попробуете это:

$array1 = array("a" => "green", "red", "blue", "red"); 
$array2 = array("b" => "green", "yellow", "red"); 
$result = array_diff($array2, $array1); 

print_r($result); 

>

выход будет Array ([0] => yellow), потому что это разница между вторым и первым массивом?.

Надеюсь, это поможет! : D

0

Becouse это как array_diff работы:

Сравнивает array1 против одного или нескольких других массивов и возвращает значения в array1, которые не присутствуют ни в одном из других массивов.

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

0

Вы прочитали: the documentation?

Сравнивает array1 против одного или нескольких других массивов и возвращает значения в array1, которые не присутствуют ни в одном из других массивов.

Единственная ценность в array1, который не присутствует в array2 является «синий».

0

То же самое смутило меня давным-давно :) Вы должны поменять массив в array_diff в вашем случае. Arrray diff фактически работает: покажите мне, что у меня в первом массиве ($ array1), который у меня нет в других массивах Приветствия!:)

1

От documentation:

array array_diff (array $array1 , array $array2 [, array $... ]) 

Возвращает массив, содержащий все записи array1, не ни в одном из других массивов.

В соответствии с этим, что следует напечатает синий, потому что это единственный элемент, который не существует в $array2.

Это не будет печатать желтый, потому что он проверяет наличие элементов, которые присутствуют в $array1, но не в $array2, НЕ наоборот:

<?php 
$array1 = array("a" => "green", "red", "blue", "red"); 
$array2 = array("b" => "green", "yellow", "red"); 
$result = array_diff($array1, $array2); 
print_r($result); 
?> 

только голубой из $array1 не существует в $array2, поэтому распечатайте его. Не заботятся о элементах, которые присутствуют в $array2, но не в $array1, поэтому желтый не отображается.

0

Выход правильный, поскольку функция отображает значения, которые присутствуют в первом массиве, но не во втором. Если вы хотите отобразить желтый цвет, вам нужно инвертировать позиции массивов в вашей функции. Надеюсь, поможет.