如何过滤和排序文本块到一个数组,在PHP中


How to filter and sort a text-block into an array, in PHP?

我有一个简单的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]