【发布时间】:2015-06-16 16:05:24
【问题描述】:
我需要维护数组键,并在键上附加一个数字,以便在展平数组时使其唯一。
示例输入:
$array = array(
array("name"=>"bob", "age"=>32, "third_param"=>"something"),
array("name"=>"ted", "age"=>57, "third_param"=>"something else"),
array("name"=>"ned", "age"=>103, "third_param"=>"another something"),
);
需要的输出:
$array = array(
"name-1"=>"bob",
"age-1"=>32,
"third_param-1"=>"something",
"name-2"=>"ted",
"age-2"=>57,
"third_param-2"=>"something else",
"name-3"=>"ned",
"age-3"=>103,
"third_param-3"=>"another something"
);
我能够弄清楚如何做到这一点,但我的解决方案缓慢而混乱。一定有更好的方法。
这是我当前的功能:
function flatten_array($array, $flat = array()) {
foreach($array as $k=>$v){
$k = strval($k);
if(!is_array($v)){
$i = 0;
while(true){
$i++;
$key = $k."-".strval($i);
if(!isset($flat[$key])) break;
}
$flat[$key] = $v;
}else{
$flat = flatten_array($v, $flat);
}
}
return $flat;
}
这是一个示例用法:http://3v4l.org/6QVj0/ (点击执行按钮,然后查看“性能”选项卡。
这需要很长时间并且在我对真实数据进行测试时超时,但是它确实产生了我需要的结果。我该怎么做才能让它更快而不占用太多内存?
【问题讨论】:
-
无论您在做什么,我 99% 都认为原始阵列更好。也许扩展您想要更改它的原因。
-
当然。我正在研究一个从 HTML 表或 CSV 格式的数据库构建报告的类。一些文件包含不明确的 JSON 数据。为了使 JSON 在表格或 CSV 中易于阅读,我需要将其展平。我已经弄清楚了那部分。
-
@AbraCadaver 你还有 99% 的把握吗?
-
不,现在我 100% 确定了。
-
@AbraCadaver 详细说明。你会怎么做?
标签: php arrays recursion multidimensional-array flatten