我有一些文字:
$string = “———version1———
item1-result1
item2-result2
item3-result3
———version2———
Item1-result4
Item2-result5
Item3-result6
———version3———
Item1-result7
Item2-result8
Item3-result9”
我需要遍历这些行并展开包含连字符分隔符( - )的行并添加到关联数组但按版本分组,因此值将相互映射,如下所示:
我需要的结果是:
array = [
Version1_item1 => result1,
Version1_item2=>result2
…
…
Version2_item1=>result4
etc
]
我可以使用explode,并将项值添加到一个数组,然后将结果添加到另一个数组,然后使用array_combine,但我似乎无法使代码正确。
$final_result = array();
foreach (explode('\n', $string) as $piece) {
$result = array();
$result[] = explode('-', $piece);
有人可以帮忙吗?
答案 0 :(得分:1)
主要问题是您使用的是'\n'
,但在单引号中,它并不代表换行符。您应该将"\n"
用于双引号。
您应该使用trim()
删除每行文本前后的额外空格。
最后,您要附加$result
爆炸数组,而不是分配给它:
$string = "This is the text file
item1-result1
item2-result2
item3-result3
End of text file";
$final_result = array();
foreach (explode("\n", $string) as $piece) {
$piece = trim($piece);
$result = explode('-', $piece);
if (count($result) == 2) {
$final_result[ $result[0] ] = $result[1];
}
}
print_r($final_result);
输出:
Array
(
[item1] => result1
[item2] => result2
[item3] => result3
)
<强> 修改 强>
$string = "———version1———
item1-result1
item2-result2
item3-result3
———version2———
Item1-result4
Item2-result5
Item3-result6
———version3———
Item1-result7
Item2-result8
Item3-result9";
$final_result = array();
$current_version = '';
foreach (explode("\n", $string) as $piece) {
$piece = trim($piece);
if (strpos($piece, '———') === 0) $current_version = trim($piece,'—');
$result = explode('-', $piece);
if (count($result) == 2) {
$final_result[ $current_version . '_' . $result[0] ] = $result[1];
}
}
print_r($final_result);
输出:
Array
(
[version1_item1] => result1
[version1_item2] => result2
[version1_item3] => result3
[version2_Item1] => result4
[version2_Item2] => result5
[version2_Item3] => result6
[version3_Item1] => result7
[version3_Item2] => result8
[version3_Item3] => result9
)
答案 1 :(得分:0)
你的方法是对的,所以只修改了单行qoutes的换行符。还要记住换行的最佳做法是使用PHP常量PHP_EOL,它表示当前系统的EOL(行尾)。
foreach (explode(PHP_EOL, $string) as $piece) {
}