我的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']);
我需要一个循环还是有什么想要的东西?
答案 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);