/ / отримати різницю між масивами - php, масиви, асоціативний масив

отримати різницю між масивами - php, масиви, асоціативно-масив

Я задав трохи подібне питання тут,https://stackoverflow.com/questions/18343559/compare-two-associative-arrays?noredirect=1#comment26938095_18343559 або тут порівняти два асоціативні масиви та відобразити різницю Але це набагато вдосконалене та модифіковане питання, щоб полегшити його, як мені пропонують багато гуру. Будь ласка, не негативний. Якщо я зроблю помилку, просто скажи мені, і я спробую це виправити, будь ласка?

Ось питання ... Я використовую php 5.3, і цей масив з’являється після передачі багатьох процесів із згенерованого запиту PDO MySQL та використання наступної функції

function diff($new,$old)
{
$del=array_diff_assoc($old,$new);
$add=array_diff_assoc($new,$old);
return $diff=array("old"=>$del, "news"=>$add);
}

Масив виглядає так:

$aa= Array
(
[old] => Array
(

[cod] =>
[gender] => m
[title] =>
)
[news] => Array
(
[cod] =>
[gender] => f
[title] => Mr
[wl] => 255
[heigh] =>
)
)

Я спробував наступний код

$ об'єднати = масив_мереж_рекурсивний ($ aa ["старий"], $ aa ["новини"]);

Створити наступний масив .. (Це саме той результат, якого я хочу)

Array
(
[gender] => Array
(
[gender] => m
[gender] => f
)
[title] => Array
(
[title] =>
[title] => Mr
)
[gender] => Array
(
[gender] => m
[gender] => f
)
[wl] => Array
(
[wl] =>
[wl] => 255
)
)

Але, схоже, у мене є небажані дані ...

Що він повинен зробити, це якщо у[старий] масив і має значення в масиві [news] з тим самим ключем, тоді покажіть його, якщо будь-який ключ вийде в масиві [news] зі значенням, але якщо в масиві [news] є будь-який ключ і не має відповідного ключа у [старий] масив і не має значення, не показуйте його.

будь-яку ідею, я оціню .... я просто стек деякі, як ...

Відповіді:

1 для відповіді № 1

Ви робите там логічну помилку. У масиві з парами ключ-значення не може бути "двох різних значень для одного і того ж ключа:

[gender] => Array
(
[gender] => m
[gender] => f
)

У наведеному вище масиві, gender повторюється двічі. Що б $array["gender"]["gender"] повернути?

Якщо припустити, що замість цього вам потрібен масив:

[gender] => Array
(
m,
f
)

Ви можете просто перебирати обидва масиви та додавати відповідні значення. Ось приклад, який приймає порожнє значення null:

$final = array(); // final array
$old;
$new;

foreach ($old as $k => $v) {
$final[$k] = array($v, null);
}

foreach ($new as $k => $v) {
if (array_key_exists($k, $final) {
$final[$k][1] = $v;
} else {
$final[$k] = array(null, $v);
}
}

У наведеному вище коді буде надруковано щось на зразок:

Array
(
[gender] => Array
(
m, f
)
[title] => Array
(
null, Mr
)
[gender] => Array
(
m, f
)
[wl] => Array
(
null, 255
)
)

що є найближчим до вашого масиву.