首页 / PHP / PHP – 多维数组到CSV
PHP – 多维数组到CSV
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP – 多维数组到CSV,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3399字,纯文字阅读大概需要5分钟。
内容图文
![PHP – 多维数组到CSV](/upload/InfoBanner/zyjiaocheng/703/5a62027d1a5f48ad941a13dcd8c62ef7.jpg)
我目前编写了一种将多维数组转换为逗号分隔值的方法(为了便于调试,我使用管道而不是逗号).问题是,我知道我用来做这个的代码很可怕.它的工作原理我想要它,但它并不好看.
我需要的
目前,arr_to_csv()函数适用于多维数组中的五级嵌套数据.我需要一个递归函数来为一个或无限数量的嵌套数组执行相同的操作,或者在正确的方向上进行良好的微调.递归不是我的强项,但我知道这是前进的方向.
数据输入
将多维数组传递给函数.
array
'name' =>
array
'singular' => null
'plural' => null
'fields' =>
array
'price' =>
array
'label' => string 'Preis' (length=5)
'company_id' =>
array
'label' => null
'placeholder' => null
//...the array could go on...
该函数返回以下内容……
这正是我想要的……
0 => string 'name||singular||null' (length=20)
1 => string 'name||plural||null' (length=18)
2 => string 'fields||price||label||Preis' (length=27)
3 => string 'fields||company_id||label||null' (length=31)
4 => string 'fields||company_id||placeholder||null' (length=37)
5 => string 'fields||name||label||null' (length=25)
6 => string 'fields||name||placeholder||null' (length=31)
我糟糕的构造功能
我对递归并不擅长,所以这里是我可怕的foreachs列表.从下面的代码中可以看出,这很糟糕(不需要阅读整个内容,它只是复制自己).请帮我理清我可怕的代码!
function arr_to_csv($data,$csv = '||') {
$array = array();
/* Epic amount of for each's. This could be done with recursion */
foreach($data as $key => &$value) {
if (!is_array($value)) {
$array[] = $key . $csv .(is_null($value)?'null':$value);
} else {
foreach ($value as $k => &$v) {
if (!is_array($v)) {
$array[] = $key . $csv . $k . $csv . (is_null($v) ? 'null' : $v);
} else {
foreach ($v as $kk => &$vv) {
if (!is_array($vv)) {
$array[] = $key . $csv . $k . $csv . $kk . $csv . (is_null($vv) ? 'null' : $vv);
} else {
foreach ($vv as $x => &$y) {
if (!is_array($y)) {
$array[] = $key . $csv . $k . $csv . $kk . $csv. $x . $csv . (is_null($y) ? 'null' : $y);
} else {
foreach ($y as $too => $long) {
if(!is_array($long)) {
$array[] = $key . $csv . $k . $csv . $kk . $csv. $x . $csv . $too . $csv. (is_null($long)?'null':$long);
} else {
foreach ($long as $omg => $why) {
if(!is_array($why)) {
$array[] = $key . $csv . $k . $csv . $kk . $csv. $x . $csv . $too . $csv . $omg . $csv . (is_null($why) ? 'null' : $why);
}
}
}
}
}
}
}
}
}
}
}
}
return $array;
}
解决方法:
这是一些伪代码,但它是一个开始:
$strings = [];
$flattenArray = function($arr, $level) use (&$strings, &$flattenArray) {
foreach($arr as $key=>$value){
$s = &$strings[$level];
if(!isset($s)) { $s = array(); }
$s[] = $key;
if(is_array($value)) {
$flattenArray($value, $level);
}
else {
$s[] = $value;
}
$level ++;
}
};
$flattenArray($myArray, 0);
foreach($strings as &$arr) {
$arr = implode("||", $arr);
}
your array:http://codepad.viper-7.com/CR2SPY的小型演示< - 它不能完全运行,但它是一个开始 更新: 这是一个我觉得按你想要的方式运行的演示:http://codepad.viper-7.com/shN4pH
码:
$strings = [];
$flattenArray = function($arr, $level, $k = null) use (&$strings, &$flattenArray) {
foreach($arr as $key=>$value){
if($k === null) {
$s = &$strings[$key];
}
else {
$s = &$strings[$k];
}
if(!isset($s)) {
$s = array();
}
$str = &$s[$level];
if(!isset($str)) {
$str = array();
if($k !== null) { $str[] = $k; }
}
$str[] = $key;
if(is_array($value)) {
$flattenArray($value, $level, ($k === null) ? $key : $k);
}
else {
$str[] = is_null($value) ? "null" : $value;
}
$level ++;
}
};
$flattenArray($myArray, 0);
$all = [];
foreach($strings as $k => $arr){
$new = array();
foreach($arr as $ky => $ar) {
$all[] = implode("||", $ar);
}
}
print_r($all);
内容总结
以上是互联网集市为您收集整理的PHP – 多维数组到CSV全部内容,希望文章能够帮你解决PHP – 多维数组到CSV所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。