Перебрать 2 двумерыных массива по условию с in_array();

littus

Новичок
Всем привет! )
Помогите перебрать и скомпановать массив по условию:

Есть 2 двумерных массива. Структура одинаковая,но кол-во элементов разное. Причем в $arr1 есть все то, что и в $arr2.

$arr1;
Код:
array (size=10)
  0 =>
    array (size=3)
      0 => string '226' (length=3)
      1 => string '3' (length=1)
      3 => string 'parentCat' (length=9)
  1 =>
    array (size=3)
      0 => string '227' (length=3)
      1 => string '3' (length=1)
      3 => string 'parentCat' (length=9)
  2 =>
    array (size=3)
      0 => string '229' (length=3)
      1 => string '4' (length=1)
      3 => string 'parentCat' (length=9)
  3 =>
    array (size=3)
      0 => string '230' (length=3)
      1 => string '4' (length=1)
      3 => string 'parentCat' (length=9)
  4 =>
    array (size=3)
      0 => string '231' (length=3)
      1 => string '5' (length=1)
      3 => string 'parentCat' (length=9)
  5 =>
    array (size=3)
      0 => string '233' (length=3)
      1 => string '6' (length=1)
      3 => string 'parentCat' (length=9)
  6 =>
    array (size=3)
      0 => string '226' (length=3)
      1 => string '7' (length=1)
      3 => string 'subCat' (length=6)
  7 =>
    array (size=3)
      0 => string '227' (length=3)
      1 => string '8' (length=1)
      3 => string 'subCat' (length=6)
  8 =>
    array (size=3)
      0 => string '230' (length=3)
      1 => string '9' (length=1)
      3 => string 'subCat' (length=6)
  9 =>
    array (size=3)
      0 => string '229' (length=3)
      1 => string '10' (length=2)
      3 => string 'subCat' (length=6)
$arr2;
Код:
0 =>
  array (size=3)
    0 => string '226' (length=3)
    1 => string '7' (length=1)
    3 => string 'subCat' (length=6)
1 =>
  array (size=3)
    0 => string '227' (length=3)
    1 => string '8' (length=1)
    3 => string 'subCat' (length=6)
2 =>
  array (size=3)
    0 => string '230' (length=3)
    1 => string '9' (length=1)
    3 => string 'subCat' (length=6)
3 =>
  array (size=3)
    0 => string '229' (length=3)
    1 => string '10' (length=2)
    3 => string 'subCat' (length=6)
Нужно, по большому счету, в $arr2 добавить элементы(массив) из $arr1 у которых
Код:
$arr1[$i][0] !== $arr2[$i][0].
Т.е. добавить весь подМассив из $arr1 в структуру $arr2 если в последнем нет такого значения, как есть в $arr2.

Иными словами, в $arr2 у меня нет из $arr1 только вот этого:
Код:
4 =>
    array (size=3)
      0 => string '231' (length=3)
      1 => string '5' (length=1)
      3 => string 'parentCat' (length=9)
  5 =>
    array (size=3)
      0 => string '233' (length=3)
      1 => string '6' (length=1)
      3 => string 'parentCat' (length=9)

B в ИТОГЕ нужно получить следующее (дополненный массив $arr2 или новый массив,- не столь важно):

$arr2
Код:
0 =>
  array (size=3)
    0 => string '226' (length=3)
    1 => string '7' (length=1)
    3 => string 'subCat' (length=6)
1 =>
  array (size=3)
    0 => string '227' (length=3)
    1 => string '8' (length=1)
    3 => string 'subCat' (length=6)
2 =>
  array (size=3)
    0 => string '230' (length=3)
    1 => string '9' (length=1)
    3 => string 'subCat' (length=6)
3 =>
  array (size=3)
    0 => string '229' (length=3)
    1 => string '10' (length=2)
    3 => string 'subCat' (length=6)
4 =>
    array (size=3)
      0 => string '231' (length=3)
      1 => string '5' (length=1)
      3 => string 'parentCat' (length=9)
5 =>
    array (size=3)
      0 => string '233' (length=3)
      1 => string '6' (length=1)
      3 => string 'parentCat' (length=9)
Пытался сделать это двумя циклами for, перебирая в 1-м один Массив во втором 2-й, и в нем, посредством in_array() добавить в $arr2 недостающее из $arr1, но или не так мыслю или что-то не правильно делаю или то и другое, в общем у меня все некорректно получается и не могу добиться нужного результата.
 

Kotofey

FloodMaster.
PHP:
$x = array_column($arr2, 0);
foreach($arr1 as $item){
 if(!in_array($item[0], $x))
   $arr2[] = $item;
}
var_dump($arr2);
Попробуй так.
p.s. не тестировал.
 

littus

Новичок
Спасибо, работает! Все как нужно и без лишнего.

Интересно все же, - вроде логику такую же применял и пытался через in_array() в циклах сверять з-е из первого массива arr1 со вторым массивом arr2 и,если там такого нет, добавлять в arr2 элементы:

подобным образом можно добиться такого же результата? :
PHP:
    for($k=0,$cnt=count($arr2); $k<$cnt; ++$k):
        for($k2=0,$cnt=count($arr1); $k2<$cnt; ++$k2):
            if( !in_array( $arr1[$k2][0], $arr2[$k2] ) ) {
                $arr2[$k2] = $arr1[$k];
            }
        endfor;
    endfor;
 

AnrDaemon

Продвинутый новичок
Первого типа.
Серьёзно, зачем
а) использовать for() там, где достаточно foreach(), и
б) использовать этот ублюдочный синтаксис, который только очень внимательные и дотошные люди знают?
 
Сверху