За последние 24 часа нас посетили 97210 программистов и 2681 робот. Сейчас ищут 1473 программиста ...

Сравнение многомерных массивов

Тема в разделе "PHP для новичков", создана пользователем Nikolai_, 25 янв 2013.

  1. Nikolai_

    Nikolai_ Активный пользователь

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Подскажите, пожалуйста, решение.

    Есть 2 многомерных массива, например:

    Код (Text):
    1. $array_1 = array(3 => arrray( 'id_book' => 2, 'id_format' => 2))
    2. $array_2 = array(1 => array( 'id_book' => 2, 'id_format' => 2), 2 => array('id_book' => 2, 'id_format' => 3))
    Как, сравнивая их, получить массив совпадающих подмассивов (без учета ключа) и несовпадающих подмассивов (также без учета ключа)?
     
  2. Nikolai_

    Nikolai_ Активный пользователь

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    В общем, вот что придумал.

    Выборка значений нового массива, которых нет в старом.

    Код (Text):
    1. foreach ($old as $k1 => $v1){
    2.     foreach ($new as $k2 => $v2){
    3.         if($v1 == $v2)
    4.             unset($new[$k2]);
    5.      }
    6. }
    7. print_r($new);
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если бы вы записывали их как $array[book][format]=чегото, то могли бы проверить наличие подходящих книг через банальный isset и один цикл
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    все уже давно придумано.
    курите функции типа array_diff()
     
  5. Nikolai_

    Nikolai_ Активный пользователь

    С нами с:
    27 авг 2010
    Сообщения:
    133
    Симпатии:
    0
    Эта ф-я здесь не катит. При одинаковых подмассивах, но с разными ключами, они выдает их как разные. А других ф-й, удовлетворяющих задаче, я что-то не нашел.
     
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    array_udiff()