@unfapable

Как получить ID из двух массивов?

Есть массив вида:

array (
  50888 => 
    array (
      'ELEMENTS' => 
      array (
        0 => '1028',
        1 => '1030',
      ),
    ),
  50889 => 
  array (
    'ELEMENTS' => 
    array (
      0 => '1048',
    ),
  ),
  50890 => 
  array (
    'ELEMENTS' => 
    array (
      0 => '1039',
    ),
  ),
)


И есть такой массив вида:

array (
  0 => '1028',
  1 => '1039',
)


Нужно получить ключи первого массива, идентификаторы ELEMENTS которых есть во втором массиве, т.е. в результате получился массив вида:

array (
  0 => '50888',
  1 => '50890',
)
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ответы на вопрос 4
@gents
$array1 = [];
$array2 = [];
$result = [];
$i = 0;
foreach ($array1 as $row){
    foreach ($row as $row1){
        if (in_array($row1, $array2)){
        $result[$i] = $row;
        $i += 1;
        }
    }
}
var_dump($result);

Написал без проверки, прямо тут в редакторе) Но видимо как то так)
$array1 и $array2 это Ваши массивы.
Ответ написан
Комментировать
Ashlst
@Ashlst
Фанат эстетики и красивых решений.
Ответ написан
Комментировать
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
$first = [50888 => [ 'ELEMENTS' => [0=>1028]]];
$second = [0 => '1028', 1 => '1029'];
array_flip($second);
$new = [];
foreach($first as $key=>$value){
  foreach($value[ 'ELEMENTS' ] as $num){
    if(isset($second[$num])){
      $new[] = $key;
    }
  }
}
print_r($new);
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
$array1 = array(50888 => array('ELEMENTS' => array('1028', '1030')),
                50889 => array('ELEMENTS' => array('1048')),
                50890 => array('ELEMENTS' => array('1039')),
          );
$array2 = array('1028', '1039');

$array3 = array_reduce(array_keys($array1), function($carry, $key) use ($array1, $array2) {
    if (count(array_intersect($array1[$key]['ELEMENTS'], $array2)) > 0)
        $carry[] = $key;
    return $carry;
}, array());
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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