为什么我的PHP foreach没有工作?

为什么我的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正在运行,但由于某种原因,从不设置$startfalse为什么我的PHP foreach没有工作?

+0

'如果($开始&& $ VAL =““!)' – Cheery 2012-02-22 03:55:30

+0

这里的东西来了解[PHP比较运算符(HTTP:// PHP达网络/手动/ EN/language.operators.comparison.php)。 – 2012-02-22 03:57:26

+3

出于好奇,你想在这里做什么?如果将字符串的第一个字母设为大写,则会有一个函数'ucwords',它接受一个字符串并将每个单词的首字母大写。你可以做一个'ucwords(strtolower($ string))'来执行相同的转换。 – phindmarsh 2012-02-22 03:58:13

我不能强调这不够:使用尤达条件

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是一项任务,而不是比较。使用==

+0

哇。谢谢!花了1小时就可以了。我是PHP新手,所以不习惯。 – antonpug 2012-02-22 03:56:00

您在测试中使用了一个等值,意思是“赋值”。你可能意味着==(平等),但在这种情况下,布尔值,你并不需要在所有的比较:

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

现在,它变得解释为“设置$starttrue && $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

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