php array_diff неправильно reuslt - PullRequest
0 голосов
/ 10 июня 2019

Здравствуйте, у меня есть функция array_dif между двумя массивами, и результат не такой, как должен. Я не понимаю, почему он не возвращает статус как разность. Первый массив - данные, второй - строка, а третий - результат. В результате это также должно быть состояние, потому что значение отличается.

$result = array_diff($data,$row );
array(9) {
  ["scooter_id"]=>
  string(6) "RO0001"
  ["battery_lvl"]=>
  string(2) "80"
  ["lat"]=>
  string(9) "44.312150"
  ["lng"]=>
  string(9) "23.872900"
  ["alt"]=>
  string(1) "0"
  ["speed"]=>
  string(1) "0"
  ["status"]=>
  string(1) "2"
  ["ip"]=>
  string(14) "213.233.101.62"
  ["port"]=>
  int(24600)
}

array(11) {
  ["battery_lvl"]=>
  string(2) "80"
  ["nr_satelites"]=>
  string(1) "1"
  ["lat"]=>
  string(9) "44.312154"
  ["longi"]=>
  string(9) "23.873007"
  ["alt"]=>
  string(1) "0"
  ["speed"]=>
  string(1) "0"
  ["status"]=>
  string(1) "1"
  ["location"]=>
  string(7) "romania"
  ["ip"]=>
  string(14) "213.233.101.62"
  ["port"]=>
  string(5) "24600"
  ["status_intermediar"]=>
  string(1) "2"
}

array(3) {
  ["scooter_id"]=>
  string(6) "RO0001"
  ["lat"]=>
  string(9) "44.312150"
  ["lng"]=>
  string(9) "23.872900"
}

Ответы [ 3 ]

1 голос
/ 10 июня 2019

array_dif является односторонней функцией («Сравнивает массив1 с одним или несколькими другими массивами и возвращает значения в массиве1, которых нет ни в одном из других массивов.» - https://www.php.net/manual/en/function.array-diff.php).

Если вы хотите всеdiff, вы должны вызывать его дважды: array_dif ($ first, $ second) и array_dif ($ second, $ one) и при желании объединить результаты.

1 голос
/ 10 июня 2019
$array_difference1 = array_merge(array_diff($array1, $array2),
    array_diff($array2, $array1));

$array_differnce = array_merge(array_diff($array_difference1, $array3),
    array_diff($array3, $array_difference1));
0 голосов
/ 10 июня 2019

array_diff проверяет только значения.

Поскольку ваш второй массив содержит ["status_intermediar"]=> string(1) "2", он находит значение, поэтому не видит его как разницу

Если вы хотите проверить и ключи, и значения, вы должны использовать array_diff_assoc

Кроме того, если вы хотите найти все различные значения из обоих массивов, вы должны запустить его дважды

$difference1=array_diff_assoc($array1,$array2);

$difference2=array_diff_assoc($array2,$array1);

...