Задать вопрос
flapflapjack
@flapflapjack
на треть я прав

Какой простейший способ проверить вхождение во вложенном массиве?

Подскажите пожалуйста. Мне нужно проверить, есть ли в массиве arr2 такая запись, у которой id совпадает с id из массива arr1.

$arr1=array(
0=>array('name'=>'testgroup','id'=>30),
1=>array('name'=>'testgroup2','id'=>32)
);
$arr2=array(
0=>array('name'=>'testgroup','id'=>30),
1=>array('name'=>'testgroup1','id'=>31),
2=>array('name'=>'testgroup2','id'=>32));


Я вижу только такое решение:
foreach($arr2 as $arr2item){
echo $arr2item['id']."\n";

        $matches=0;
        foreach($arr1 as $arr1item){
        if($arr1item['id']==$arr2item['id']) ++$matches;
                }

        echo "Matches: $matches\n";

}


Но по-моему это дичь какая-то. Тем более я застрял на уровне 2005-го года, когда был PHP 5.3, и может уже появились какие-то новые функции, которые решат мою задачу как-нибудь проще?

Смысл - Arr1 - это группы, которые админит юзер, Arr2 - список всех групп.

Мне нужно в форме поставить чекбоксы напротив пунктов ARR2, в которых соблюдается условие (ARR1 есть в ARR2)
  • Вопрос задан
  • 141 просмотр
Подписаться 1 Простой 8 комментариев
Пригласить эксперта
Ответы на вопрос 1
rpsv
@rpsv
делай либо хорошо, либо никак
$arr1ids = array_column($arr1, 'id');
$arr2ids = array_column($arr2, 'id');
$intersecIds = array_intersect($arr1ids, $arr2ids);
$arr1inArr2 = array_filter($arr1, function(array $item) use($intersecIds) {
    return in_array($item['id'], $intersecIds);
});


Тем более я застрял на уровне 2005-го года, когда был PHP 5.3

Это даже по объявлению массивов видно :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы