как сравнивать 2 ассоциативных массива?

230
18 мая 2017, 12:48

Добрый день друзья! Прошу помочь как правильно написать код для сравнения 2-х массивов $array1 и $array2.

Array
    (
    [0] => Array
        (
            [icraci_id] => 6
            [iwci] => K. A
            [icra] => 1
        )
    )

и

Array
    (
    [0] => Array
        (
            [icraci_id] => 6
            [iwci] => K. A
            [count] => 1
        )
    (
    [1] => Array
        (
            [icraci_id] => 7
            [iwci] => K. B
            [count] => 3
        )
    (
    [2] => Array
        (
            [icraci_id] => 8
            [iwci] => K. C
            [count] => 2
        )
    )

Пишу

<?php $i=1; $a=0; foreach ($array1 as $item):?>
<tr><td><?=$i?></td>
    <td><?=$item['iwci']?></td>
    <td><?=$item['cnt']?></td>
    <td><?php
    if (in_array($item['icraci_id'], $array2[$a])){
      $array2[$a]['icra']}
    else {
       что-то другое...
   }
   ?>
   <?php $i++;$a++; endforeach; ?>

Он сравнивает не так как нужно.

Answer 1

Как писали в комментариях к официальной документации array_diff можно использовать вот такую рекурсивную функцию:

function arrayRecursiveDiff($aArray1, $aArray2) {
    $aReturn = array();
    foreach ($aArray1 as $mKey => $mValue) {
        if (array_key_exists($mKey, $aArray2)) {
            if (is_array($mValue)) {
                $aRecursiveDiff = arrayRecursiveDiff($mValue, $aArray2[$mKey]);
                if (count($aRecursiveDiff)) { $aReturn[$mKey] = $aRecursiveDiff; }
            } else {
                if ($mValue != $aArray2[$mKey]) {
                    $aReturn[$mKey] = $mValue;
                }
            }
        } else {
            $aReturn[$mKey] = $mValue;
        }
    }
    return $aReturn;
}
Answer 2

Помог еще один foreach

<?php
    $i =1;
    foreach ($array1 as $key => $item):?>
        <tr>
        <td><?=$i?></td>
        <td><?=$item['iwci']?></td>
        <td class="text-center"><?=$item['cnt']?></td>
        <td class="text-center">
            <?php 
                foreach ($array2 as $title) {
                    if ($item['icraci_id'] == $title['icraci_id']){
                        echo $title['icra'];
                    }
                }
            ?>
        </td>
        </tr>
<?php
    $i++;
    endforeach; ?>
READ ALSO
Анонимный опрос на php

Анонимный опрос на php

Помогите пожалуйста, как написать опрос на php для формы с input-и которая передает кол-во голосов в JSON файл?Я пока не понимаю как работает язык,...

214
Редактор Wordpress добавляет и удаляет тег &lt;p&gt;. Как это отключить?

Редактор Wordpress добавляет и удаляет тег <p>. Как это отключить?

Редактор автоматически добавляет теги p Чтобы это оключить в шаблон страницы добавил

285
Как подсчитать поле lot со значением Enum &#39;1&#39;?

Как подсчитать поле lot со значением Enum '1'?

$lots = Post::find()->where(['lot' => 1])->asArray()->count();

185
Почему возникает такая ошибка и как &ldquo;правильно&rdquo; написать деструктор?

Почему возникает такая ошибка и как “правильно” написать деструктор?

Проблема возникает именно в том момент когда вызывается десктруктор, если доверит создание деструктора "автоматике", то ни чего не меняется...

209