Я пытаюсь сопоставить 2 массива, которые выглядят так, как показано ниже.
$system = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$public = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
Моя проблема в том, что мне нужно, чтобы ключи массива обоих массивов имели одинаковое значение и одинаковый счет.
Что значит:
// passes - both arrays have the same key values and same counts of each key
$system = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$public = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
// fails - $public does not have 'blue' => 1
$system = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$public = array('red' => 2, 'green' => 3, 'purple' => 4);
// should fail - $public has 2 'blue' => 1
$system = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$public = array('blue' => 1, 'blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
Я пытался использовать array_diff_keys, array_diff и другие функции php, но ни одна из них не может поймать дополнительные ключи с тем же значением (т.е. если «синий» => 1 повторяется, он все еще проходит)
Какой хороший способ решить эту проблему?
@SougataBose, почему ты удалил свой ответ, это правильно ...
эта проблема не может быть решена с помощью php, так ведет себя php, php получает последнее значение отдельного ключа






Когда вы пишете два значения с одним и тем же ключом в PHP, второе перезапишет значение из первого (и это не ошибка). Ниже показано, что я сделал в интерактивном CLI PHP (запустите его с помощью php -a):
php > $x = ["x" => 1, "x" => 2, "y" => 2];
php > var_dump($x);
array(2) {
["x"]=>
int(2)
["y"]=>
int(2)
}
Итак, array_diff, кажется, работает правильно. Вы просто ожидаете, что PHP будет вести себя не так, как на самом деле!
Ваш последний массив
$publicнедействителен, у вас не может быть двух ключейblueв массиве. Если выvar_export(array('blue' => 1, 'blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4))вы получитеarray('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4)