obtener indice index elementos elemento ejemplos buscar asociativo array agregar php arrays function methods

indice - Pasar una matriz como argumentos, no una matriz, en PHP



obtener el indice de un array php (4)

En aras de la integridad, a partir de PHP 5.1, esto también funciona:

<?php function title($title, $name) { return sprintf("%s. %s/r/n", $title, $name); } $function = new ReflectionFunction(''title''); $myArray = array(''Dr'', ''Phil''); echo $function->invokeArgs($myArray); // prints "Dr. Phil" ?>

Ver: http://php.net/reflectionfunction.invokeargs

Para los métodos, utiliza ReflectionMethod::invokeArgs en ReflectionMethod::invokeArgs lugar y pasa el objeto como primer parámetro.

Me parece recordar que en PHP hay una manera de pasar una matriz como una lista de argumentos para una función, desreferenciando la matriz en la manera estándar de func($arg1, $arg2) . Pero ahora estoy perdido en cómo hacerlo. Recuerdo la manera de pasar por referencia, cómo "glob" los parámetros entrantes ... pero no cómo deslistar la matriz en una lista de argumentos.

Puede ser tan simple como func(&$myArgs) , pero estoy bastante seguro de que no es así. Pero, lamentablemente, el manual de php.net no ha divulgado nada hasta el momento. No es que haya tenido que usar esta característica particular durante el último año más o menos.


También tenga en cuenta que si desea aplicar un método de instancia a una matriz, debe pasar la función como:

call_user_func_array(array($instance, "MethodName"), $myArgs);


Como se mencionó , a partir de PHP 5.6+ puede (¡debería!) Usar el ... token (también conocido como "operador splat", parte de la funcionalidad de las funciones variadic ) para llamar fácilmente a una función con una matriz de argumentos:

<?php function variadic($arg1, $arg2) { // Do stuff echo $arg1.'' ''.$arg2; } $array = [''Hello'', ''World'']; // ''Splat'' the $array in the function call variadic(...$array); // ''Hello World''

Nota: los elementos de la matriz se asignan a argumentos por su posición en la matriz, no por sus claves.

Según el comentario de CarlosCarucce , esta forma de desempaquetar argumentos es, en todos los casos, el método más rápido . En algunas comparaciones, es más de 5 veces más rápido que call_user_func_array .

Aparte

Porque creo que esto es realmente útil (aunque no directamente relacionado con la pregunta): puede escribir-insinuar el parámetro del operador splat en la definición de su función para asegurarse de que todos los valores pasados ​​coincidan con un tipo específico.

(Solo recuerde que al hacer esto, DEBE ser el último parámetro que defina y que agrupe todos los parámetros pasados ​​a la función en la matriz).

Esto es ideal para asegurarse de que una matriz contenga elementos de un tipo específico:

<?php // Define the function... function variadic($var, SomeClass ...$items) { // $items will be an array of objects of type `SomeClass` } // Then you can call... variadic(''Hello'', new SomeClass, new SomeClass); // or even splat both ways $items = [ new SomeClass, new SomeClass, ]; variadic(''Hello'', ...$items);