为什么我的PHP foreach不工作?

时间:2012-02-22 03:53:06

标签: php

$start = true;
$new = "";
foreach($array as $val)
{
    if($start = true && $val != " ")
    {
        $start = false;
        $new .= strtoupper($val);
    }
    elseif($val == " ")
    {
        $new .= " ";
        $start = true;
    }
    else
    {
        $new .= strtolower($val);
    }
    $start = false;
}

基本上发生的事情是$start永远不会变成false并且一切都变得大写。所以看起来第一个if IS正在运行,但由于某种原因,从来没有设置$startfalse

5 个答案:

答案 0 :(得分:1)

$start = true是一项任务,而非比较。使用==

答案 1 :(得分:1)

您在测试中使用单个等号,这意味着“分配”。您可能意味着==(相等),但在这种情况下,使用布尔值,您根本不需要进行比较:

$start = true;
$new = "";
foreach($array as $val)
{
    if($start && $val != " ") // <-- remove the = true here
    {
        $start = false;
        $new .= strtoupper($val);
    }
    elseif($val == " ")
    {
        $new .= " ";
        $start = true;
    }
    else
    {
        $new .= strtolower($val);
    }
    $start = false;
}

现在,它被解释为“将$start设置为true && $val != " "” - 绝对不是您的意图。

答案 2 :(得分:1)

我不能强调它:使用 yoda条件

if(true == $var)

或一般:

if(CONSTANT == $VARIABLE)

而不是

if($VARIABLE == CONSTANT) //which you'd wrongly type as "="

PHP会告诉你在那种情况下出了什么问题 - 不管你有多累。

寻找这个错误(它发生在最好的情况下)也是令人沮丧的。

让工具(PHP)支持你,不要让它对你起作用。

这是一个更笼统的说明。至于你的问题,它可以用一个单行:

<?php
$array = "hEllo woRlD";

var_dump(ucwords(strtolower($array)));

答案 3 :(得分:0)

$start = true && $val != " "表示:

$start = (true && $val != " ")
$start = ($val != " ")
$start = !($val == " ") // $start is true except when $val is a single space.

我相信你的意思是$start == true

答案 4 :(得分:0)

你只是试图将每个单词的第一个字符大写吗?如果是这样,请查看ucwords