在 php 中排序后从数组中删除字符
removing characters from array after sorting in php
我正在 PHP 中从一个文本文件中按字母顺序对数据进行排序,该文本文件工作得很好,但不幸的是,自动填充的文本文件包含像 #039 这样的字符;我想从最终结果中删除。尝试了很多方法来替换和删除字符,但没有成功。这是我目前所拥有的:
<?php
error_reporting(E_ALL);
$fileName = 'cache/_city.txt';
$data = file_get_contents($fileName);
// Assuming that the file had the data in one line...
// Split the data using the delimiter
$split = explode("|", $data);
// Sort
sort($split);
// Put it all back together
$data = implode(" ", $split);
$data = str_replace("'" , "", $data);
echo $data;
?>
如何从 $data 中删除这段文本:#039;
示例数据:
<a href="?city=Leiden">Leiden</a>|
<a href="?city=Papendrecht">Papendrecht</a>|
<a href="?city=Helmond">Helmond</a>|
<a href="?city=%26%23039%3Bs-Hertogenbosch">&#039;s-Hertogenbosch</a>|
<a href="?city=Hengelo">Hengelo</a>|
<a href="?city=Marknesse">Marknesse</a>|
<a href="?city=Wanssum">Wanssum</a>|
<a href="?city=Rijswijk">Rijswijk</a>|
<a href="?city=Leunen">Leunen</a>|
<a href="?city=Genemuiden">Genemuiden</a>|
问题中没有足够的信息说明您要替换的内容。这样就基本确定答案了。
如果您只想替换几个特定字符,最好使用 str_replace
或其变体,但如果它是多个 'junk' 个字符(在您的回答中暗示) ,例如,您可以替换 Unicode 范围(使用 preg_replace
)。有人在这里提问并得到了一个简单的答案:How do I replace characters not in range [0x5E10, 0x7F35] with '*' in PHP?
函数参考:
https://secure.php.net/manual/en/function.str-replace.php
https://secure.php.net/manual/en/function.preg-replace.php
旁注:您应该使用
,而不是  
。
编辑:根据您提供的新信息,您似乎在尝试删除已编码的字符,请尝试:str_replace(''', '', urldecode($data))
你试过类似的东西吗:
$data = str_replace($wrongChar , "", $data);
编辑:
即使我认为你会 'clean' 超出你的需要,你能测试一下吗:
$data = file_get_contents($fileName);
$data = preg_replace('/[^A-Za-z0-9\-]/', '', $data);
第二版:
知道 *_replace 正在工作,我改进了我的建议。
<?php
error_reporting(E_ALL);
// It will apply html_entity_decode serveral times on the string to convert all HTML entities
$recursive_decode = function($str, $depth = 1) use (&$recursive_decode) {
if (!$depth) {
return $str;
}
return $recursive_decode(html_entity_decode($str, ENT_QUOTES, 'UTF-8'), --$depth);
};
$fileName = 'cache/_city.txt';
// In this test, try with a depth egals to 2
$data = $recursive_decode(file_get_contents($fileName), 2);
// Assuming that the file had the data in one line...
// Split the data using the delimiter
$split = explode('|', $data);
// Sort
sort($split);
// Put it all back together
$data = implode(" ", $split);
// Because recursive_decode converted all entities, your previous "'" is now "'"
$data = str_replace("'" , "", $data);
echo $data;
?>
我正在 PHP 中从一个文本文件中按字母顺序对数据进行排序,该文本文件工作得很好,但不幸的是,自动填充的文本文件包含像 #039 这样的字符;我想从最终结果中删除。尝试了很多方法来替换和删除字符,但没有成功。这是我目前所拥有的:
<?php
error_reporting(E_ALL);
$fileName = 'cache/_city.txt';
$data = file_get_contents($fileName);
// Assuming that the file had the data in one line...
// Split the data using the delimiter
$split = explode("|", $data);
// Sort
sort($split);
// Put it all back together
$data = implode(" ", $split);
$data = str_replace("'" , "", $data);
echo $data;
?>
如何从 $data 中删除这段文本:#039;
示例数据:
<a href="?city=Leiden">Leiden</a>|
<a href="?city=Papendrecht">Papendrecht</a>|
<a href="?city=Helmond">Helmond</a>|
<a href="?city=%26%23039%3Bs-Hertogenbosch">&#039;s-Hertogenbosch</a>|
<a href="?city=Hengelo">Hengelo</a>|
<a href="?city=Marknesse">Marknesse</a>|
<a href="?city=Wanssum">Wanssum</a>|
<a href="?city=Rijswijk">Rijswijk</a>|
<a href="?city=Leunen">Leunen</a>|
<a href="?city=Genemuiden">Genemuiden</a>|
问题中没有足够的信息说明您要替换的内容。这样就基本确定答案了。
如果您只想替换几个特定字符,最好使用 str_replace
或其变体,但如果它是多个 'junk' 个字符(在您的回答中暗示) ,例如,您可以替换 Unicode 范围(使用 preg_replace
)。有人在这里提问并得到了一个简单的答案:How do I replace characters not in range [0x5E10, 0x7F35] with '*' in PHP?
函数参考:
https://secure.php.net/manual/en/function.str-replace.php https://secure.php.net/manual/en/function.preg-replace.php
旁注:您应该使用
,而不是  
。
编辑:根据您提供的新信息,您似乎在尝试删除已编码的字符,请尝试:str_replace(''', '', urldecode($data))
你试过类似的东西吗:
$data = str_replace($wrongChar , "", $data);
编辑:
即使我认为你会 'clean' 超出你的需要,你能测试一下吗:
$data = file_get_contents($fileName);
$data = preg_replace('/[^A-Za-z0-9\-]/', '', $data);
第二版:
知道 *_replace 正在工作,我改进了我的建议。
<?php
error_reporting(E_ALL);
// It will apply html_entity_decode serveral times on the string to convert all HTML entities
$recursive_decode = function($str, $depth = 1) use (&$recursive_decode) {
if (!$depth) {
return $str;
}
return $recursive_decode(html_entity_decode($str, ENT_QUOTES, 'UTF-8'), --$depth);
};
$fileName = 'cache/_city.txt';
// In this test, try with a depth egals to 2
$data = $recursive_decode(file_get_contents($fileName), 2);
// Assuming that the file had the data in one line...
// Split the data using the delimiter
$split = explode('|', $data);
// Sort
sort($split);
// Put it all back together
$data = implode(" ", $split);
// Because recursive_decode converted all entities, your previous "'" is now "'"
$data = str_replace("'" , "", $data);
echo $data;
?>