使用PHP去除多余的空间。我的代码有什么问题?

使用PHP去除多余的空间。我的代码有什么问题?,php,string,Php,String,我正在尝试使用下面的PHP代码从站点检索一些信息: $doc = new domDocument(); $html = file_get_contents('https://www.ibar.az/en/'); libxml_use_internal_errors(true); $doc->loadHTML($html); libxml_use_internal_errors(false); $ExchangePart = $doc->getElementsByTagName('li

我正在尝试使用下面的PHP代码从站点检索一些信息:

$doc = new domDocument();
$html = file_get_contents('https://www.ibar.az/en/');
libxml_use_internal_errors(true);
$doc->loadHTML($html);
libxml_use_internal_errors(false);
$ExchangePart = $doc->getElementsByTagName('li');
$USD=$ExchangePart->Item(91)->nodeValue;

$USD=htmlentities($USD);
$USD=str_replace("&nbsp","", $USD);

$TrimedUSD=trim($USD);

$USDArray=str_split($TrimedUSD);
$TotalSymbols=count($USDArray);
$k=0;

for ($i=0; $i<$TotalSymbols; $i++) {
    //var_dump($USDArray[$i]);
    if ($USDArray[$i]==" " or $USDArray[$i]==PHP_EOL) {
        $k=$k+1;
        //echo ($k."<br>");
            if ($k>1) {
                unset($USDArray[$i]);
            }
    } else {$k=0;}
}
var_dump($USDArray);
$doc=newDOMDocument();
$html=文件\u获取\u内容('https://www.ibar.az/en/');
libxml\u使用\u内部错误(true);
$doc->loadHTML($html);
libxml\u使用\u内部错误(false);
$ExchangePart=$doc->getElementsByTagName('li');
$USD=$ExchangePart->Item(91)->nodeValue;
$USD=人民币元($USD);
$USD=str_替换(“,”,$USD);
$TrimedUSD=trim(美元);
$USDArray=str_分割($TrimedUSD);
$TotalSymbols=计数($USDArray);
$k=0;
对于($i=0;$i1){
未结算($USDArray[$i]);
}
}else{$k=0;}
}
var_dump(美元阵列);
我使用for循环来消除字符串中的额外空格。我故意不想使用正则表达式

不幸的是,代码不能去掉所有多余的空格。 var_转储的结果:

array(34){[0]=>string(1)“U”[1]=>string(1)“S”[2]=>string(1)“D”[3]=>string(1)”[4]=>string(1)”[5]=>string(1)”[37]=>string(1)“1”[38]=>string(1)”。“[39]=>string(1)“5”[40]=>string(1)“0”[41]=>string(1)”9”[42]=>string(1)“4”[43]=>string(1)”[44]>[78]=>string(1)”.“[79]=>string(1)”4”[80]=>string(1)”6”[81]=>string(1)”4”[82]=>string(1)”1”[84]=>string(1)”[85]=>string(1)”[117]=>string(1)“1”[118]=>string(1)”=>字符串(1)“[157]=>字符串(1);”}

它在单词之间留有3个空格(数组元素4&,5),不过我想保留一个空格

谁能告诉我我做错了什么。格拉西亚斯!:)

更新:

当使用Chrome view source查看var_dump的结果时,我注意到:

数组(34){
[0]=>
字符串(1)“U”
[1]=>
字符串(1)“S”
[2]=>
字符串(1)“D”
[3]=>
字符串(1)”
[4]=>
字符串(1)”
[5]=>
字符串(1)”
"
....
..

参见第[4]项和第[5]项。我觉得这些不是空格……有什么建议吗

更新2

我使用ORD函数转换并打印每个符号的ASCII码: $i=0;$i的


未经测试并在我的手机上写入。因此可能会有一些错误。

我认为您的问题在于
未设置
,它会使数组跳过元素。 您可以尝试以下方法:

$k=0;
$dummy_array = $USDArray;

foreach ($dummy_array as $key => $value) {
    //var_dump($USDArray[$i]);
    if ( " " == $value || $value == PHP_EOL || '' == $value) {
        $k=$k+1;
        //echo ($k."<br>");
            if ($k>1) {
                unset($USDArray[$key]);
            }
    } else {$k=0;}
}
$k=0;
$dummy_array=$USDArray;
foreach($key=>$value的伪数组){
//var_dump($USDArray[$i]);
如果(“=$value | |$value==PHP|EOL |“”==$value){
$k=$k+1;
//回声($k.“
”); 如果($k>1){ 未设置($USDArray[$key]); } }else{$k=0;} }
使用以下代码:-

$USDArray = ['0' => 'A', '1' => 'B', '2' => ' ', '3' => ' ','4' => ' ', '5' => 'C','6' => ' ', '7' => ' '];
$USDArray = array_map('trim', $USDArray); // remove white space from array elements
for($i=0;$i<=count($USDArray);$i++){
    if (empty($USDArray[$i]) && empty($USDArray[$i+1])){        
          unset($USDArray[$i+1]);   
    }
}
echo '<pre>'; print_r($USDArray); 
注意:-使用它返回数组中的所有值,并对数组进行数字索引

$count = null;
$returnValue = preg_replace('/(\\s{2,})/', ' ', 'USD  11    99', -1, $count);


result: 'USD 11 99'

唯一合理的做法是使用正则表达式来实现


想一想,也许你可以这样做:
如果($USDArray[$i]==”&&$USDArray[$i+1]==”)
然后执行第二个for循环,检查“距离”你有空格,当你得到这个数字时,你使用第三个for循环将$i+1设置为$i+otherCounter。但是为什么不使用regex呢?我只是想考虑一件事。在第二个计数器中,你可以设置值。第三个for循环没有意义。@Andreas-我只想用PHP解决这个问题我说的是PHP。看看我的答案owRegex!!!!是我的建议,但值不是空的,是空格。这不一样吗?@Andreas-是的,你是对的,
空的
空格
不是same@Andreas:-Ohh!!谢谢你指出这一点。我刚刚编辑了我的答案。$I=$k+1;可能应该只有$I=$k,因为$I无论如何都会在for循环中递增。
$USDArray = ['0' => 'A', '1' => 'B', '2' => ' ', '3' => ' ','4' => ' ', '5' => 'C','6' => ' ', '7' => ' '];
$USDArray = array_map('trim', $USDArray); // remove white space from array elements
foreach($USDArray as $k=>$v){
    if (empty($USDArray[$k]) && empty($USDArray[$k+1])){        
           unset($USDArray[$k+1]);   
    }
}
echo '<pre>'; print_r($USDArray); 
Array
(
    [0] => A
    [1] => B
    [2] => 
    [5] => C
    [6] => 
)
echo '<pre>'; print_r(array_values($USDArray)); 
Array
(
    [0] => A
    [1] => B
    [2] => 
    [3] => C
    [4] => 
)
$count = null;
$returnValue = preg_replace('/(\\s{2,})/', ' ', 'USD  11    99', -1, $count);


result: 'USD 11 99'