$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正在运行,但由于某种原因,从来没有设置$start
到false
。
答案 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
。