De:Comment obtenir des valeurs dans un tableau de cette façon avec PHP?
$arr = array(array('key1'=>'A',...),array('key1'=>'B',...));
à:
array('A','B',..);
De:Comment obtenir des valeurs dans un tableau de cette façon avec PHP?
$arr = array(array('key1'=>'A',...),array('key1'=>'B',...));
à:
array('A','B',..);
conversion relativement simple en boucle:
$newArray = array()
foreach ($arr as $a) {
foreach ($a as $key => $value) {
$newArray[] = $value;
}
}
Ou, peut-être plus élégante:
function flatten($concatenation, $subArray) {
return array_merge($concatenation, array_values($subArray));
}
$newArray = array_reduce($arr, "flatten", array());
Jean La solution est également sympa.
Y at-il une fonction intégrée pour faire ce genre de travail? – Mask
Je crois qu'il n'y a pas de fonction intégrée pour faire exactement cela. –
@Mask, Pas avec les tableaux associatifs. Sinon, vous pouvez créer un nouveau tableau en utilisant l'une de plusieurs fonctions ou l'opérateur "+" pour créer une Union des tableaux. – Thomas
$output = array();
foreach ($arr as $array_piece) {
$output = array_merge($output, $array_piece);
}
return array_values($output);
D'autre part, si vous voulez que la première valeur de chaque tableau, ce que vous voulez est ...
$output = array();
foreach ($arr as $array_piece) {
$output[] = array_unshift($array_piece);
}
Mais je pense que vous voulez que le premier.
Quelque chose comme cela devrait fonctionner
<?
$arr = array(array('key1'=>'A','key2'=>'B'),array('key1'=>'C','key2'=>'D'));
$new_array = array();
foreach ($arr as $key => $value) {
$new_array = array_merge($new_array, array_values($value));
}
var_export($new_array);
?>
Si vous voulez que toutes les valeurs de chaque tableau dans votre tableau principal.
function collapse($input) {
$buf = array();
if(is_array($input)) {
foreach($input as $i) $buf = array_merge($buf, collapse($i));
}
else $buf[] = $input;
return $buf;
}
Au-dessus est une fonction unsplat modifiée, qui pourrait également être utilisé:
function unsplat($input, $delim="\t") {
$buf = array();
if(is_array($input)) {
foreach($input as $i) $buf[] = unsplat($i, $delim);
}
else $buf[] = $input;
return implode($delim, $buf);
}
$newarray = explode("\0", unsplat($oldarray, "\0"));
Voulez-vous que la première valeur de chacun des réseaux internes ou toutes les valeurs de chaque tableau? –