在foreach循环pdo之后比较行中前一个值的第一个字母字符串

时间:2014-01-30 18:23:02

标签: php mysql pdo

我正在使用的代码,但没有给出正确的结果。

foreach ($dbo->query($sql) as $row) {
        $a = "$row[Description_code]";
        $aa = $a[0]; // first of string
        $b = prev($a);
        $bb = $b[0];  // first of string

echo "$aa";
if ($aa != $bb){
                 echo "<p></p>";
               }
                                     }

这不应该像它应该的那样工作,$ aa的结果看起来像AAABBCCCCDDEEFFFF等 如果A!= A它应该给分页符,导致html AAA

BB

CCCC

DD

EE

FFFF

1 个答案:

答案 0 :(得分:1)

由于你无法理解我在说什么,例如:

php > $a = 'abcdefghijkl';
php > $aa = $a[0];
php > $b = prev($a);
PHP Warning:  prev() expects parameter 1 to be array, string given in php shell code on line 1
php > $bb = $b[0];
php > echo "$a $aa $b $bb\n";
abcdefghijkl a
 ^^-- $a     ^--$aa    hey! where's $b & $bb ?????

如上面的警告所示,你 对字符串使用prev(),因为它是 NOT 一个数组。

您的代码应为:

$previous_char = '';
while($row = mysql_fetch_assoc($result)) {
    $string = $row['Description of Code'];
    $first_char = substr($string, 0, 1);
    if ($first_char <> $previous_char) {
       echo '<p></p>';
       $previous_char = $first_char;
    }
    echo $first_char;
}

您的代码,即使写得正确,也可能从不工作,因为您从未考虑过提取的PREVIOUS数据行中的数据。您只考虑CURRENT行中的数据。当前行的第一个字符将始终与自身匹配,因此您永远不会有换行符。