2012-03-19 92 views
2

我正在写一个函数,旨在净化PHP脚本将从外部源接收的格式不正确的字符串。这个字符串的问题是每个奇数字节都是零,所以函数的作用是将每个偶数字节都推送到一个新数组中。 Code

$serverInfoClean = array(); 
for ($i = 0; $i < strlen($serverInfo); $i++) // Remove every odd numbered byte 
{ 
    if ($i & 1) // Odd index 
    { 
     // Do nothing 
    } 
    else // Even index 
    { 
     array_push($serverInfoClean, $serverInfo[i]); 
     echo $i . ' ' . $serverInfo[i] . '<br/>'; // Debug 
    } 
} 

调试线是否有这样我就可以在浏览器中的哪些值返回看。它每次都返回字符串中的第一个字符。

+3

在PHP中,变量表示了'$'前缀; '我'不是一个变量,只有'$ i'是。 – Gumbo 2012-03-19 18:31:53

+0

...我不敢相信我错过了那个。 – Surma 2012-03-19 18:57:37

回答

2
$serverInfoClean = array(); 
$end = strlen($serverInfo); 
for ($i = 0; $i < $end; $i++) // Remove every odd numbered byte 
{ 
    if ($i & 1) // Odd index 
    { 
      // Do nothing 
    } 
    else // Even index 
    { 
      array_push($serverInfoClean, $serverInfo[$i]); 
      echo $i . ' ' . $serverInfo[$i] . '<br/>'; // Debug 
    } 
} 
+0

你把strlen放在循环的外部,这样它就不必在每次迭代中进行评估,是否正确? – Surma 2012-03-19 19:04:58

+0

正确的一个mundo – 2012-03-20 13:32:54

1

我不认为你应该跳到它是“格式不正确的字符串”的结论。这听起来很像你的字符串已被编码为UTF-16,以便它也可以使用非ASCII(Unicode)字符。

您可以改用multibyte string functions来正确处理多字节字符。

+0

哦,谢谢!这会为我节省一些编码。 – Surma 2012-03-19 19:00:53

0

更换$serverInfo[i]$serverInfo[$i]

相关问题