1

我有一个看起来像这样的 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']);

我需要一个循环还是有什么花哨的?

4

6 回答 6

5

如果这是您想要的,这可能会:

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

或者可能

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

这应该给你

array('some value', 'another value', 'another value')
于 2011-07-19T13:08:45.750 回答
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);

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

于 2011-07-19T14:10:26.530 回答
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);
于 2011-07-19T14:26:28.093 回答
1

请试试这个:

$new_array = array();
foreach($array as $item) {
  $new_array[] = $item['value'];
};
于 2011-07-19T13:09:18.940 回答
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);
于 2011-07-19T13:15:54.687 回答
0
array_map(function($a){
    return $a['value'];
},$array);

对于 php5.2 及更早版本:

function stuff($a){
    return $a['value'];
}
array_map('stuff',$array);
于 2011-07-19T13:10:37.923 回答