Array
(
[a] => Array
(
[a] => Array
(
[a] => a
[b] => b
)
[b] => Array
(
[a] => a
[b] => b
)
)
[b] => Array
(
[a] => Array
(
[a] => a
[b] => b
)
[b] => Array
(
[a] => a
[b] => b
)
)
)
如何从上面的数组中获取下面的字符串?
aaa,aab,aba,abb,baa,bab,bba,bbb
您可以简单地编写一个递归函数来自动将键连接在一起。
function getKeysString($array, $prefix = '') {
$keys = array();
foreach($array as $key => $value) {
$str = $prefix.$key;
if(is_array($value)) {
$str = getKeysString($value, $str);
}
$keys[] = $str;
}
return implode(',', $keys);
}
所以,给定数组:
$arr = array (
'a' => array (
'a' => array (
'a' => null,
'b' => null
),
'b' => array (
'a' => null,
'b' => null
)
),
'b' => array (
'a' => array (
'a' => null,
'b' => null
),
'b' => array (
'a' => null,
'b' => null
)
)
);
以下将为您提供您想要的结果:
$result = getKeysString($arr);
$str = array();
foreach($array as $key1 => $value1)
{
foreach($value1 as $key2 => $value2)
{
foreach($value2 as $key3 => $value3)
$str[]= $key1.$key2.$key3;
}
}
echo implode(',', $str);
我想添加一个基于@AndrewMoore 脚本的现代函数式递归函数。
逻辑没有改变。迭代级别的所有键。如果该值为数组,则遍历该数组。将携带的前缀添加到每个遇到的键之前。
array_map()
版本:(演示)
function getKeyPaths(array $array, string $prefix = ''): string
{
return implode(
',',
array_map(
fn($k, $v) => is_array($v) ? getKeyPaths($v, "$prefix$k") : "$prefix$k",
array_keys($array),
$array
)
);
}
var_export(getKeyPaths($array));
array_reduce()
版本:(演示)
function getKeyPaths(array $array, string $prefix = ''): string
{
return implode(
',',
array_reduce(
array_keys($array),
fn($carry, $k) => $carry
+ [
$k => is_array($array[$k])
? getKeyPaths($array[$k], "$prefix$k")
: "$prefix$k"
],
[]
)
);
}
var_export(getKeyPaths($array));
$Student = array(array("Adam",10,10),
array("Ricky",10,11),
array("Bret",15,14),
array("Ram",14,17)
);
for($i=0;$i<=3;$i++){
for($j=0;$j<=2;$j++){
print_r($Student[$i][$j]);
echo "<br>";
}
}