Tengo una matriz de matrices que pueden tener un recuento diferente de elementos cuando se ejecuta el script.
$strict = [ [0] => ['one', 'two', 'three', 'four'], [1] => ['one', 'two', 'four', 'eight'], [2] => ['two', 'four', 'ten', 'twenty'], /* [x] => [. . .] */ ]; $result = array_intersect($strict[0], $strict[1], $strict[2]); print_r($result); //shows ['two', 'four'];
Sin embargo, quiero hacer algo como esto:
$result = array_intersect($strict);
Donde paso una matriz de longitud dinámica de matrices y array_intersect
pasará por cada una y tomará solo las entradas comunes.
Hacer array_intersect($strict)
no funciona porque la función requiere al menos dos argumentos.
tal vez algo como
array_intersect(function ($array) { $list = ''; foreach ($array as $el) { $list .= $el.','; } $list = rtrim($list, ','); return eval($list); });
aunque este método en particular todavía arroja el error
Advertencia: array_intersect(): se requieren al menos 2 parámetros, 1 dado
Puedes usar call_user_func_array
:
Llame a una devolución de llamada con una matriz de parámetros
Entonces, su devolución de llamada sería array_intersect
, y podría pasar su matriz de esta manera:
$result = call_user_func_array('array_intersect', $strict);
También puede aprovechar las funciones modernas de empaquetado/desempaquetado de matrices de PHP, también conocidas como variadics, o el llamado operador "splat" ( ...
):
$result = array_intersect(...$strict);