我有一个简单的3列文本块:
id_1 text_1 A
id_9 text_2 B
id_2 text_5 D
id_3 text_3 G
id_8 text_4 C
id_4 text_9 X
id_0 text_0 X
id_5 text_8 Z
...
和PHP数组:
$std_string = array ("A", "B", "X", "C", "M");
我想过滤和排序文本块到一个新的文本块,基于顺序和$std_string
中存在的文本。
完全正确,它将返回一个新的文本块:
id_1
id_9
[DU]
id_8
[NO]
如果第三列(原始文本块)在第一列($std_string
中列出)中没有值(如M),它将返回[NO]。
如果第三列(原始文本块)在第一列有两个值(如X),它将返回[DU]。
在PHP中有什么建议吗?
所有数据都是区分大小写的。
如下:
$text_block="id_1 text_1 A
id_9 text_2 B
id_2 text_5 D
id_3 text_3 G
id_8 text_4 C
id_4 text_9 X
id_0 text_0 X
id_5 text_8 Z";
$std_string = array ("A", "B", "X", "C", "M");
$rows = explode("'n", str_replace("'r","",str_replace("'t"," ",$text_block)));
$letter_ids = array();
foreach($std_string as $letter) {
$letter_ids[$letter] = "[NO]";
}
for($i=0;$i<count($rows);$i++) {
$cols = explode(" ",trim($rows[$i]));
$letter = $cols[count($cols)-1];
if(isset($letter_ids[$letter])) {
if($letter_ids[$letter] == "[NO]") {
$letter_ids[$letter] = $cols[0];
} else {
$letter_ids[$letter] = "[DU]";
}
}
}
$new_text_block = "";
foreach($letter_ids as $key => $val) {
$new_text_block.= $val."'n";
}
echo "<pre>".$new_text_block."</pre>";
输出:id_1
id_9
[DU]
id_8
[NO]