eliminar - php array key value
Cortar una matriz PHP multidimensional en uno de sus elementos (10)
A partir del 20 de junio en PHP-5.5, hay una nueva función array_column
Por ejemplo:
$records = array(
array(
''id'' => 2135,
''first_name'' => ''John'',
''last_name'' => ''Doe''
),
array(
''id'' => 3245,
''first_name'' => ''Sally'',
''last_name'' => ''Smith''
),
array(
''id'' => 5342,
''first_name'' => ''Jane'',
''last_name'' => ''Jones''
),
array(
''id'' => 5623,
''first_name'' => ''Peter'',
''last_name'' => ''Doe''
)
);
$firstNames = array_column($records, ''first_name'');
print_r($firstNames);
Volverá
Array
(
[0] => John
[1] => Sally
[2] => Jane
[3] => Peter
)
Hay incluso más ejemplos en el enlace mencionado anteriormente.
Digamos, por ejemplo, que acaba de consultar una base de datos y que recibió esta matriz 2D.
$results = array(
array(''id'' => 1, ''name'' => ''red'' , ''spin'' => 1),
array(''id'' => 2, ''name'' => ''green'', ''spin'' => -1),
array(''id'' => 3, ''name'' => ''blue'' , ''spin'' => .5)
);
A menudo me encuentro escribiendo loops como este.
foreach($results as $result)
$names[] = $result[''name''];
¿Mi pregunta es si existe una forma de obtener este array $ names sin usar un bucle? El uso de funciones de devolución de llamada cuenta como usar un bucle.
Aquí hay un ejemplo más genérico de obtener cada campo.
foreach($results as $result)
foreach($result as $key => $value)
$fields[$key][] = $value;
Creo que esto hará lo que quieras
Deberías hacer algo como esto
$results = array(
array(''id'' => 1, ''name'' => ''red'' , ''spin'' => 1),
array(''id'' => 2, ''name'' => ''green'', ''spin'' => -1),
array(''id'' => 3, ''name'' => ''blue'' , ''spin'' => .5)
);
$name = array_uintersect_uassoc( $results, array(''name'' => ''value'') , 0, "cmpKey");
print_r($name);
//////////////////////////////////////////////////
// FUNCTIONS
//////////////////////////////////////////////////
function cmpKey($key1, $key2) {
if ($key1 == $key2) {
return 0;
} else {
return -1;
}
}
Sin embargo, no tengo acceso a PHP5, así que no lo he probado.
Esta es la alternativa de función rápida de array_column ()
if(!function_exists(''array_column'')) {
function array_column($element_name) {
$ele = array_map(function($element) {
return $element[$element_name];
}, $a);
return $ele;
}
}
Iniciando PHP 5.3, puede usar esta linda llamada con la función lambda:
$names = array_map(function ($v){ return $v[''name'']; }, $results);
Esto devolverá la matriz dividida por la dimensión ''nombre''.
Investigué más sobre esto y descubrí que ruby y prototype tienen una función que hace esto llamada array_pluck , 2 . Es interesante que array_map
tiene un segundo uso que te permite hacer lo inverso de lo que quiero hacer aquí. También encontré una clase de PHP que alguien está escribiendo para emular la manipulación de matrices de prototipos.
Voy a investigar un poco más y si no encuentro nada más, trabajaré en un parche para enviarlo a la lista de correo de [email protected] y veré si agregarán array_pluck.
Para aquellos de ustedes que no pueden actualizar a PHP5.5
este momento y necesitan esta función, aquí hay una implementación de array_column
.
function array_column($array, $column){
$a2 = array();
array_map(function ($a1) use ($column, &$a2){
array_push($a2, $a1[$column]);
}, $array);
return $a2;
}
Podrías hacerlo:
$tmp = array_flip($names);
$names = array_keys($tmp);
Si está ejecutando una versión de PHP anterior a 5.5 y array_column()
, puede usar el reemplazo oficial en PHP simple:
Simplemente, no.
Tendrá que usar un bucle o una función de devolución de llamada como array_walk .
Voté la respuesta de @ Devon porque realmente no hay una manera de hacer lo que estás pidiendo con una función incorporada. Lo mejor que puedes hacer es escribir el tuyo:
function array_column($array, $column)
{
$ret = array();
foreach ($array as $row) $ret[] = $row[$column];
return $ret;
}