为什么我的PHP foreach没有工作?
问题描述:
$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
。为什么我的PHP foreach没有工作?
答
我不能强调这不够:使用尤达条件
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)));
答
您在测试中使用了一个等值,意思是“赋值”。你可能意味着==
(平等),但在这种情况下,布尔值,你并不需要在所有的比较:
$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 != " "
” - 绝对不是什么你打算。
+0
不错的驱动器downvote。非常好。 – Ryan 2012-02-22 14:37:37
答
$start = true && $val != " "
手段:
$start = (true && $val != " ")
$start = ($val != " ")
$start = !($val == " ") // $start is true except when $val is a single space.
我相信你的意思$start == true
。
'如果($开始&& $ VAL =““!)' – Cheery 2012-02-22 03:55:30
这里的东西来了解[PHP比较运算符(HTTP:// PHP达网络/手动/ EN/language.operators.comparison.php)。 – 2012-02-22 03:57:26
出于好奇,你想在这里做什么?如果将字符串的第一个字母设为大写,则会有一个函数'ucwords',它接受一个字符串并将每个单词的首字母大写。你可以做一个'ucwords(strtolower($ string))'来执行相同的转换。 – phindmarsh 2012-02-22 03:58:13