PHP数组从未知数量的参数合并

时间:2011-07-19 13:04:29

标签: php arrays array-merge

我的PHP数组看起来像这样:

$array['my_data']['value'] = 'some value';
$array['my_own_data']['value'] = 'another value';
$array['different_data']['value'] = 'another value';

我需要在PHP等中使用array_merge。问题是第一级密钥的数量是未知的。它可能是150件,我不知道。

由于密钥数量未知,这对我不起作用:

array_merge($array['my_data'], $array['my_own_data'], $array['different_data']);

我需要一个循环还是有什么想要的东西?

6 个答案:

答案 0 :(得分:4)

如果这是你想要的,可能会这样做:

$array = array_map('current', $array);

或可能

$array = array_map(function ($a) { return $a['value']; }, $array);

这应该给你

array('some value', 'another value', 'another value')

答案 1 :(得分:2)

  

问题是第一级密钥的数量是未知的。它可能是150件,我不知道。

这是一个容易解决的问题。

如果您想知道第一级的键数:

$numberOfKeysOfTheFirstLevel = count($array);

你现在知道这个号码。如果你真的需要他们的名字,你也可以这样做:

$keyNamesOfTheFirstLevel = array_keys($array);

那么你继续问你的问题:

  

由于密钥数量未知,这对我不起作用:   array_merge($array['my_data'], $array['my_own_data'], $array['different_data']);

好消息是,您无需知道执行array_merge操作的密钥数量:

call_user_func_array('array_merge', $array);

关于你在问题中所写的内容,这应该回答它。但结果可能不是您的预期。请同时查看其他答案,并询问

答案 2 :(得分:1)

请试试这个:

$new_array = array();
foreach($array as $item) {
  $new_array[] = $item['value'];
};

答案 3 :(得分:1)

// 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);

将返回

array(
  'value1' => 'some value', 
  'value2' => 'another value', 
  'value3' => 'another value', 
)

否则,你想要这样的东西吗?

array(
  'value' => array('some value', 'another value', 'another value')
)

然后你可以做

$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);

答案 4 :(得分:0)

array_map(function($a){
    return $a['value'];
},$array);

对于php5.2及更早版本:

function stuff($a){
    return $a['value'];
}
array_map('stuff',$array);

答案 5 :(得分:0)

如果我了解您的需求,可以使用array_map

改变:

$a = array();
$a['x']['value'] = 1;
$a['y']['value'] = 3;
$a['z']['value'] = 3;

成:

array(3) {
 ["x"]=>
 int(1)
 ["y"]=>
 int(2)
 ["z"]=>
 int(3)
}

您可以定义一个函数:

function f($x) { return $x['value'];}

并使用array_map

$b = array_map(f, $a);