Получение значения вложенного массива, который существует в каждом массиве - PullRequest
0 голосов
/ 23 октября 2019

У меня есть следующий (вложенный) массив:

array(3) { [16]=> array(3) { [0]=> int(159) [1]=> int(160) [2]=> int(158) } 
           [21]=> array(2) { [0]=> int(160) [1]=> int(158) } 
           [19]=> array(2) { [0]=> int(158) [1]=> int(159) } }

Как вы можете видеть, он содержит 3 дочерних массива. Все дочерние массивы содержат в качестве значения целое число «158», но также и «159». Я хочу как-то зациклить через дочерний массив и сделать проверку, если все дочерние массивы содержат это значение. Затем я хочу вернуть массив только с этими значениями.

Я знаю, что мог бы использовать для этого array_intersect, однако вложенный массив генерируется динамически, поэтому я не уверен, как с этим справиться, используя массив intersect:

<?php
$arr1 = array('158','250','342'); 
$arr2 = array('158','142','352');

$diff1 = array_intersect($arr1, $arr2);
print_r( $diff1 );
//RETURNS Array ( [0] => 158 )
?>

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Вы можете использовать оператор splat (...), чтобы передать все подмассивы в array_intersect() за один раз ...

$arr1 = [['158','250','342'],['158','142','352'],['1421','158','3521']];

$diff1 = array_intersect(...$arr1);
print_r( $diff1 );
//RETURNS Array ( [0] => 158 )
0 голосов
/ 23 октября 2019

После небольшого поиска я обнаружил следующее:

$result = call_user_func_array('array_intersect', $productStoreArray);

Как видно на: php dynamic array_intersect

Это решает мою проблему, потому что возвращается ко мне:

//RETURNS Array ( [0] => 158, 1 => 159 )
...