【发布时间】:2015-01-26 14:32:52
【问题描述】:
我必须在 PHP 中为以下函数扁平化多维表以使其更具可读性。另外,这个脚本的效果需要一点时间。这是应该工作的代码:
$data = array(
"one" => "one",
"two" => array(
"three" => "three",
"four" => "four",
),
"five" => "five",
"six" => array(
"seven" => "seven",
"eight" => array(
"nine" => "nine",
"ten" => "ten"
)
)
);
$flat=array();
do{
$newFlat=array();
if(empty($data)) break;
if(empty($flat)) $flat = $data;
$findArray = FALSE;
foreach($flat as $key => $value){
if(is_array($value)){
if(is_string($key)) $newFlat[] = 'Start'.$key;
foreach($value as $keySec => $valueSec){
if(is_array($valueSec)){
if(is_string($keySec)) $newFlat[] = 'Start'.$keySec;
$newFlat[] = $valueSec;
if(is_string($keySec)) $newFlat[] = 'End'.$keySec;
$findArray = TRUE;
}else{
$newFlat[$keySec] = $value;
}
}
if(is_string($key)) $newFlat[] = 'End'.$key;
}else{
$newFlat[$key] = $value;
}
}
$flat = $newFlat;
}while($findArray);
print_r($flat);
结果是 $flat。可能知道如何转换此脚本以利用更少的时间和更少的内存?我希望结果如下所示:
/*
Result $flat looking like it:
$flat = [
'one' => 'one',
1 => 'Starttwo',
'three' => 'three',
'four' => 'four',
4 => 'Endtwo',
'five' => 'five,
6 => 'StartSix',
'seven' => 'seven',
8 => 'Starteight',
'nine' => 'nine',
'ten' => 'ten',
11 => 'Endeight',
12 => 'EndSix'
];
*/
附言。对不起我应受谴责的英语。我想,尽管如此,你会理解我的。
【问题讨论】:
-
这是所需的输出
-
它必须处理哪些输入案例?这只会处理两层嵌套(PHP 数组不是多维的,它们是嵌套的)。外循环提供什么目的?
-
虽然不能使用这个示例数组,但如果你曾经在一个带有数字键的数组上尝试这个循环,那么你对
empty()的使用会炸毁你:empty(0)评估为 是的。 -
你想要完成什么?什么是扁平化?
标签: php arrays performance multidimensional-array