Fusion du tableau PHP à partir d'un nombre inconnu de paramètres
j'ai un tableau PHP ressemblant à ceci:
$array['my_data']['value'] = 'some value';
$array['my_own_data']['value'] = 'another value';
$array['different_data']['value'] = 'another value';
je dois utiliser array_merge en PHP ou autre. Le problème est que le nombre de premier niveau, les touches sont inconnus. Ça pourrait être 150 Articles, Je ne sais pas.
cela ne marcherait pas pour moi en raison du nombre inconnu de clés:
array_merge($array['my_data'], $array['my_own_data'], $array['different_data']);
ai-je besoin d'une boucle ou y a-t-il quelque chose de fantaisiste?
6 réponses
Cela peut faire, si c'est ce que vous voulez:
$array = array_map('current', $array);
ou éventuellement
$array = array_map(function ($a) { return $a['value']; }, $array);
cela devrait vous donner
array('some value', 'another value', 'another value')
Le problème est que le nombre de premier niveau, les touches sont inconnus. Ça pourrait être 150 Articles, Je ne sais pas.
C'est un problème facile à résoudre.
si vous voulez connaître le nombre de touches du premier niveau:
$numberOfKeysOfTheFirstLevel = count($array);
vous connaissez le numéro. Si vous avez réellement besoin de leurs noms, Vous pouvez le faire aussi bien:
$keyNamesOfTheFirstLevel = array_keys($array);
alors vous avez continué dans votre question:
cela ne marcherait pas pour moi à cause du nombre inconnu de clés:
array_merge($array['my_data'], $array['my_own_data'], $array['different_data']);
la bonne nouvelle est que vous n'avez pas besoin de connaître le nombre de touches pour effectuer votre array_merge
opération:
call_user_func_array('array_merge', $array);
donc en ce qui concerne ce que vous avez écrit dans votre question, ceci devrait y répondre. Cependant, le résultat pourrait ne pas être ce que vous attendiez. Voir les autres réponses, merci et s'il vous plaît demandez .
s'il vous Plaît essayez ce qui suit:
$new_array = array();
foreach($array as $item) {
$new_array[] = $item['value'];
};
// 1. your array should have different keys, otherwise it will have no effect
$array['my_data']['value1'] = 'some value';
$array['my_own_data']['value2'] = 'another value';
$array['different_data']['value3'] = 'another value';
$result = call_user_func_array('array_merge', $array);
sera de retour
array(
'value1' => 'some value',
'value2' => 'another value',
'value3' => 'another value',
)
sinon, vous vouliez quelque chose comme ça ?
array(
'value' => array('some value', 'another value', 'another value')
)
Ensuite, vous pouvez faire
$array['my_data']['value'] = 'some value';
$array['my_own_data']['value'] = 'another value';
$array['different_data']['value'] = 'another value';
$result = array();
// PHP <= 5.2
array_walk($array, create_function('&$item, $key, &$dest', '
foreach ((array) $item as $subKey => $value) {
if (!isset($dest[$subKey])) { $dest[$subKey] = array(); }
$dest[$subKey][] = $value;
}
'), & $result);
var_export($result);
si je comprends ce que vous voulez, vous pouvez utiliser array_map
.
modifier:
$a = array();
$a['x']['value'] = 1;
$a['y']['value'] = 3;
$a['z']['value'] = 3;
dans:
array(3) {
["x"]=>
int(1)
["y"]=>
int(2)
["z"]=>
int(3)
}
vous pouvez définir une fonction:
function f($x) { return $x['value'];}
et utiliser array_map
:
$b = array_map(f, $a);
array_map(function($a){
return $a['value'];
},$array);
pour php5.2 et plus:
function stuff($a){
return $a['value'];
}
array_map('stuff',$array);