0

$ cartArray構造:

Array ( [0] => 1. X => 2. Y [2] => 3. Z [3] => 4. XX [4] => 5. YY [5] => ) 

$ list:

$list = array(
    "1.",
    "2.",
    "3.",
    "4.",
    "5."
);

働き

function alignNum($cartArray, $list)
{
   foreach($cartArray as $cA)
   {
      echo "<br />" . $cA . "<br /><br />";
      foreach($list as $l)
      {
            echo $l . "<br />";
            echo "Type of \$l is " . gettype($l) . " and type of \$cA is " . gettype($cA) . "<br />";

            $pos = strpos($cA, $l);

            echo "Comparing " . $l . " to " . $cA . "<br />";

            if ($pos !== true)
            {
                echo "<br />" . $l . " was not found in " . $cA . "<br /><br />";
                continue;
            }
            else
            {
                $post_cA = str_replace("EUR", "EUR</span>", $cA);

                $new_cA[] = (str_replace($l, substr($l, 0, -4) . "<span style='float: right>'", $cA)) . $post_cA;

                return $new_cA;
            }


          }
      }
}

$new_cart = alignNum($cart, $list);

そのため、カスタムデバッグメッセージ「XがYに見つかりませんでした」が表示され続けます。つまり、提供された文字列のいずれにもXが含まれていません。

タイプの問題でもありません。どちらも文字列です。

何か案は?

編集:また、これはビジネス関連のコードであるため、私はいくつかのものを検閲したことに注意してください。

4

2 に答える 2

1

でも数値とブール値を比較することは(Cプログラマーでない限り)一般的に悪い考えです
if ($pos != true)
が、
if ($pos !== true)
AFAIKでは、変数が異なるタイプであるため、決して一致しません。

于 2012-08-07T11:32:08.050 に答える
1

ドイツのアーリントンは実際に正しいです。strposが返しているものを見てください:

干し草の山の文字列の先頭を基準にして針が存在する位置を返します(オフセットとは関係ありません)。また、文字列の位置は1ではなく0から始まることに注意してください。

針が見つからなかった場合はFALSEを返します。

if ($pos !== true)

strposがブール値trueを返したかどうかを尋ねています(!==でtypesafeをチェックしているため)。しかし、実際にはstrposが針を見つけて、最初の試合の位置に2を返した可能性がありますが、あなたは本当のことを求めました。

逆の方法で確認してみてください。

if (false === $pos) { // your debug message }
于 2012-08-07T12:20:45.610 に答える