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?

1
demandé sur Jens Törnell 2011-07-19 17:04:28

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')
4
répondu deceze 2011-07-19 13:08:45

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 .

2
répondu hakre 2011-07-19 14:10:26

s'il vous Plaît essayez ce qui suit:

$new_array = array();
foreach($array as $item) {
  $new_array[] = $item['value'];
};
1
répondu Goran 2011-07-19 13:09:18
// 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);
1
répondu Yanick Rochon 2011-07-19 14:41:28

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);
0
répondu Joe Flynn 2011-07-19 13:15:54
array_map(function($a){
    return $a['value'];
},$array);

pour php5.2 et plus:

function stuff($a){
    return $a['value'];
}
array_map('stuff',$array);
0
répondu RiaD 2011-07-19 13:19:12