遍历文本文件中的行,搜索定界符并添加到关联数组
Loop through lines in text file, search for delimiter and add to associative array
我有一些这样的文字:
$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);
有人能帮忙吗?
主要问题是您使用的是 '\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
)
你的做法是对的,所以只是修改了单引号中的换行符。还请记住换行的最佳做法是使用 PHP 常量 PHP_EOL 表示当前系统的 EOL(行尾)。
foreach (explode(PHP_EOL, $string) as $piece) {
}
我有一些这样的文字:
$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);
有人能帮忙吗?
主要问题是您使用的是 '\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
)
你的做法是对的,所以只是修改了单引号中的换行符。还请记住换行的最佳做法是使用 PHP 常量 PHP_EOL 表示当前系统的 EOL(行尾)。
foreach (explode(PHP_EOL, $string) as $piece) {
}