Php 多维数组到格式化字符串
我正在尝试将多维数组转换为字符串,以便将其写入文件 场景:收集数组中的数据,将其转换为格式化字符串以提高可读性,然后将其写入文件 问题:当我尝试使用netsted foreach转换多维数组时,它无法按预期工作;大多数情况下,我通过Php 多维数组到格式化字符串,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我正在尝试将多维数组转换为字符串,以便将其写入文件 场景:收集数组中的数据,将其转换为格式化字符串以提高可读性,然后将其写入文件 问题:当我尝试使用netsted foreach转换多维数组时,它无法按预期工作;大多数情况下,我通过Array输出或仅Array输出获取部分数据。另外,当我尝试infrade()函数时,它只获取最深的值 样本多维数组输出 Array ( [09_ERROR_TEXT_DESCR] => Array ( [LINE
Array
输出或仅Array
输出获取部分数据。另外,当我尝试infrade()
函数时,它只获取最深的值
样本多维数组输出强>
Array
(
[09_ERROR_TEXT_DESCR] => Array
(
[LINES] => Array
(
[0] => 1732
[1] => 1858
)
[COUNT] => 2
)
[12_ERROR_TEXT_DESCR] => Array
(
[LINES] => Array
(
[0] => 1936
)
[COUNT] => 1
)
[14_ERROR_TEXT_DESCR] => Array
(
[LINES] => Array
(
[0] => 1365
[1] => 1476
[2] => 1697
)
[COUNT] => 3
)
[15_ERROR_TEXT_DESCR] => Array
(
[LINES] => Array
(
[0] => 1697
)
[COUNT] => 1
)
)
09_ERROR_TEXT_DESCR|1732,1858|2
12_ERROR_TEXT_DESCR|1936|1
14_ERROR_TEXT_DESCR|1365,1476,1697|3
15_ERROR_TEXT_DESCR|1687|1
将其写入文件所需的字符串输出强>
Array
(
[09_ERROR_TEXT_DESCR] => Array
(
[LINES] => Array
(
[0] => 1732
[1] => 1858
)
[COUNT] => 2
)
[12_ERROR_TEXT_DESCR] => Array
(
[LINES] => Array
(
[0] => 1936
)
[COUNT] => 1
)
[14_ERROR_TEXT_DESCR] => Array
(
[LINES] => Array
(
[0] => 1365
[1] => 1476
[2] => 1697
)
[COUNT] => 3
)
[15_ERROR_TEXT_DESCR] => Array
(
[LINES] => Array
(
[0] => 1697
)
[COUNT] => 1
)
)
09_ERROR_TEXT_DESCR|1732,1858|2
12_ERROR_TEXT_DESCR|1936|1
14_ERROR_TEXT_DESCR|1365,1476,1697|3
15_ERROR_TEXT_DESCR|1687|1
注意:
我使用
文件内容($debug\u log\u path、$result\u set、LOCK\u EX)代码>写入文件,因为在每次运行时,我希望文件被新数据覆盖。这就是我想将其转换为字符串的原因。您可以通过数组上的foreach
来实现您想要的,提取键、行和计数
值并将它们内爆为字符串。我已经演示了将每个字符串附加到一个数组中,您可以边写边写,也可以一次将整个数组写入一个文件:
$result_set = [];
foreach ($array as $key => $value) {
$result_set[] = implode('|', array($key, implode(',', $value['LINES']), $value['COUNT']));
}
print_r($result_set);
输出:
Array
(
[0] => 09_ERROR_TEXT_DESCR|1732,1858|2
[1] => 12_ERROR_TEXT_DESCR|1936|1
[2] => 14_ERROR_TEXT_DESCR|1365,1476,1697|3
[3] => 15_ERROR_TEXT_DESCR|1697|1
)
使用或可能会更轻松。这将生成一个类似于以下内容的字符串,然后可以将其写入文件:
array (
'09_ERROR_TEXT_DESCR' =>
array (
'LINES' =>
array (
0 => 1732,
1 => 1858,
),
'COUNT' => 2,
),
'12_ERROR_TEXT_DESCR' =>
array (
'LINES' =>
array (
0 => 1936,
),
'COUNT' => 1,
),
'14_ERROR_TEXT_DESCR' =>
array (
'LINES' =>
array (
0 => 1365,
1 => 1476,
2 => 1697,
),
'COUNT' => 3,
),
)
请参阅。数组的起源是什么,更重要的是,代码在哪里?@Kevin我检查了从我的私人GIT或特定格式的数据库中获取的多个源代码的输入后,填充了此数组。我用上面提到的可能性编写的代码没有按预期工作,而且由于我的绝望,大多数代码都是胡说八道。基本上,你只需要在每个批中迭代,在批中,你需要先内爆(,)
内部维度(行
),然后在另一个数组中声明它们并再次内爆(|
)与键一起显示最后一行。就像下面的答案一样,谢谢你的解释@Kevin,正如Nick在下面所说的,你所提到的正如预期的那样起作用。现在我想弄明白我怎么会在这么简单的任务上搞砸了:)@Nick,我一定是忘了记下你的答案,我以为我记下了。你的回答正好解决了我的问题。谢谢你,西丁,我相信@Nick的答案是最好的。使用PHP本机函数意味着不编写、维护或调试您自己的代码,包括将输出转换回PHP结构的代码。。使用var\u export()
意味着您可以直接以PHP的形式执行字符串结果。使用json\u encode()
意味着将您的数据转换为一种非常通用的数据交换格式,这种格式易于分析,并且易于阅读。必须为已经存在的东西编写自己的自定义实现,并且做得更好,这有什么好处?