use*_*219 21 php arrays key multidimensional-array
我想生成一个使用的第二级密钥列表.每条记录都不包含所有相同的密钥.但我需要知道所有的密钥是什么.array_keys()不起作用,它只返回一个数字列表.
基本上我想要的输出是:
action,id,validate,Base,Ebase,Ftype,Qty,Type,Label,Unit
我有一个遵循以下格式的大型多维数组:
Array
(
[0] => Array
(
[action] => A
[id] => 1
[validate] => yes
[Base] => Array
(
[id] => 2945
)
[EBase] => Array
(
[id] => 398
)
[Qty] => 1
[Type] => Array
(
[id] => 12027
)
[Label] => asfhjaflksdkfhalsdfasdfasdf
[Unit] => asdfas
)
[1] => Array
(
[action] => A
[id] => 2
[validate] => yes
[Base] => Array
(
[id] => 1986
)
[FType] => Array
(
[id] => 6
)
[Qty] => 1
[Type] => Array
(
[id] => 13835
)
[Label] => asdssdasasdf
[Unit] => asdger
)
)
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!
J.C*_*cio 20
<?php
// Gets a list of all the 2nd-level keys in the array
function getL2Keys($array)
{
$result = array();
foreach($array as $sub) {
$result = array_merge($result, $sub);
}
return array_keys($result);
}
?>
Run Code Online (Sandbox Code Playgroud)
编辑:删除多余的array_reverse()函数
array_keys(call_user_func_array('array_merge', $a));
Run Code Online (Sandbox Code Playgroud)
合并所有值并检索生成的键.
foreach($bigArray as $array){
foreach($array as $key=>$value){
echo $key;
}
}
Run Code Online (Sandbox Code Playgroud)
那应该做你想要的.
一个班轮:
$keys=array_unique(array_reduce(array_map('array_keys',$data),'array_merge',[]));
Run Code Online (Sandbox Code Playgroud)
或者在一个函数中:
function get_array_children_keys($data) {
return array_unique(
array_reduce(array_map('array_keys', $data), 'array_merge', [])
);
}
Run Code Online (Sandbox Code Playgroud)
现在让我们用一个例子来分解它,这是一些示例数据:
[
['key1' => 0],
['key1' => 0, 'key2' => 0],
['key3' => 0]
]
Run Code Online (Sandbox Code Playgroud)
从最里面的函数开始,我们使用 array_keys 函数运行 array_map:
array_map('array_keys', $data)
Run Code Online (Sandbox Code Playgroud)
这为我们提供了来自所有子数组的键
[
['key1'],
['key1', 'key2'],
['key3']
]
Run Code Online (Sandbox Code Playgroud)
然后我们使用 array_merge 回调和一个空数组作为初始值对数据运行 array_reduce:
array_reduce(..., 'array_merge', []);
Run Code Online (Sandbox Code Playgroud)
这将我们的多个数组转换为 1 个平面数组:
[
'key1',
'key1',
'key2',
'key3'
]
Run Code Online (Sandbox Code Playgroud)
现在我们用 array_unique 去除重复项:
array_unique(...)
Run Code Online (Sandbox Code Playgroud)
最后得到我们所有的钥匙:
[
'key1',
'key2',
'key3'
]
Run Code Online (Sandbox Code Playgroud)
这样的事情怎么样:
$your_keys = array_keys($your_array[0]);
Run Code Online (Sandbox Code Playgroud)
当然,这是考虑所有子阵列都有相同的键; 在这种情况下,你只需要第一个子数组的键(我猜不需要迭代所有的第一级子数组)
而且,作为一个缩短/简化的例子:
$your_array = array(
array(
'action' => 'A',
'id' => 1,
'base' => array('id' => 145),
),
array(
'action' => 'B',
'id' => 2,
'base' => array('id' => 145),
),
array(
'action' => 'C',
'id' => 3,
'base' => array('id' => 145),
)
);
$your_keys = array_keys($your_array[0]);
var_dump($your_keys);
Run Code Online (Sandbox Code Playgroud)
会得到你:
array
0 => string 'action' (length=6)
1 => string 'id' (length=2)
2 => string 'base' (length=4)
Run Code Online (Sandbox Code Playgroud)
您可以使用implode
获取您要求的字符串:
echo implode(', ', $your_keys);
Run Code Online (Sandbox Code Playgroud)
会得到你:
action, id, base
Run Code Online (Sandbox Code Playgroud)
即,第一子阵列的键列表.