J. *_*uni 24 php arrays flatten multidimensional-array
请在回答之前阅读整个问题.
我有这个多维数组:
$data = array(
'user' => array(
'email' => 'user@example.com',
'name' => 'Super User',
'address' => array(
'billing' => 'Street 1',
'delivery' => 'Street 2'
)
),
'post' => 'Hello, World!'
);
Run Code Online (Sandbox Code Playgroud)
我希望它变平,变成:
$data = array(
'user.email' => 'user@example.com',
'user.name' => 'Super User',
'user.address.billing' => 'Street 1',
'user.address.delivery' => 'Street 2',
'post' => 'Hello, World!'
);
Run Code Online (Sandbox Code Playgroud)
重要:
钥匙对我来说非常重要.我希望它们连接起来,用句点分隔.
它应该适用于任何级别的嵌套.
谢谢!
Fel*_*ing 62
这样的事情应该有效:
function flatten($array, $prefix = '') {
$result = array();
foreach($array as $key=>$value) {
if(is_array($value)) {
$result = $result + flatten($value, $prefix . $key . '.');
}
else {
$result[$prefix . $key] = $value;
}
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
J. *_*uni 17
感谢所有给出的答案.
我在下面改进了它,这是一个改进版本.它不需要根前缀,不需要使用引用,读取更清晰,并且它有一个更好的名称:
function array_flat($array, $prefix = '')
{
$result = array();
foreach ($array as $key => $value)
{
$new_key = $prefix . (empty($prefix) ? '' : '.') . $key;
if (is_array($value))
{
$result = array_merge($result, array_flat($value, $new_key));
}
else
{
$result[$new_key] = $value;
}
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
试试这个
<?php
$data = array(
'user' => array(
'email' => 'user@example.com',
'name' => 'Super User',
'address' => array(
'billing' => 'Street 1',
'delivery' => 'Street 2'
)
),
'post' => 'Hello, World!'
);
function prefixKey($prefix, $array)
{
$result = array();
foreach ($array as $key => $value)
{
if (is_array($value))
$result = array_merge($result, prefixKey($prefix . $key . '.', $value));
else
$result[$prefix . $key] = $value;
}
return $result;
}
var_dump(prefixKey('', $data));
?>
Run Code Online (Sandbox Code Playgroud)
输出
array
'user.email' => string 'user@example.com' (length=16)
'user.name' => string 'Super User' (length=10)
'user.address.billing' => string 'Street 1' (length=8)
'user.address.delivery' => string 'Street 2' (length=8)
'post' => string 'Hello, World!' (length=13)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21863 次 |
| 最近记录: |