0

$cartArray 结构:

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

$列表:

$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);

所以,我不断收到我的自定义调试消息:“在 Y 中找不到 X”。即它没有在任何提供的字符串中创建它 X。

这也不是类型的问题。两者都是字符串。

有任何想法吗?

编辑:另外,请注意我已经审查了一些内容,因为这是与业务相关的代码。

4

2 回答 2

1

德国阿灵顿实际上是对的。看看strpos返回了什么:

返回针相对于 haystack 字符串开头的位置(与偏移量无关)。另请注意,字符串位置从 0 开始,而不是 1。

如果未找到针头,则返回 FALSE。

if ($pos !== true)

您是在询问 strpos 是否返回了布尔值 true(因为您正在使用 !== 检查类型安全)。但实际上 strpos 可能已经找到了指针并返回 ie 2 作为第一个匹配的位置,但您要求的是 true。

尝试反过来检查:

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

比较数字和布尔值通常是一个坏主意(除非你是 C 程序员),
if ($pos != true)
但在
if ($pos !== true)
AFAIK 中它永远不会匹配,因为变量是不同的类型

于 2012-08-07T11:32:08.050 回答