2012-02-22 13 views
0
$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が実行されているように見えますが、なんらかの理由で$startからfalseに設定されることはありません。私のPHP foreachはなぜ機能しないのですか?

+0

'場合(!$ && $ valのを開始="「) ' – Cheery

+0

は、ここで[PHPの比較演算子]について読んするもの(HTTPです:// PHP .net/manual/en/language.operators.comparison.php)。 –

+3

ちょうど好奇心から、ここで何をしようとしていますか?文字列の最初の文字を大文字にすると、文字列を受け取り、各単語の最初の文字を大文字にする関数ucwordsがあります。あなたは 'ucwords(strtolower($ string))'を使って同じ変換を実行することができます。 – phindmarsh

答えて

1

私は十分にそれを強調することはできません:PHPは、何が悪かったのかあなたに言っただろう

if(CONSTANT == $VARIABLE) 

なく

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

if(true == $var) 

または一般ヨーダ条件を使用その場合、あなたがどんなに疲れていても。

このバグを探していると(これは最高の状態でも起こります)、イライラしています。

ツール(PHP)があなたを支持するようにしてください。あなたには効果がありません。

これは一般的なメモです。あなたの問題については、それがワンライナーでなんとかです:

<?php 
$array = "hEllo woRlD"; 

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

$start = trueは、比較ではなく、割り当てです。 ==を使用してください。

+0

うわー。ありがとう!これで1時間のように過ごしました。私はPHPに慣れていないので、それに慣れていません。 – antonpug

1

あなたのテストでは、「割り当て」を意味する単一のequalsを使用しています。おそらく==(平等)を意味しますが、この場合には、ブール値で、あなたはまったく比較する必要はありません。

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

今、それは「true && $val != " "$startを設定する」と解釈ばかりだ - 間違いない何あなたは意図した。

+0

ニースドライブバイダウンワード。非常に素晴らしい。 – Ryan

0

$start = true && $val != " "手段は:

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

私はあなたが$start == trueを意味信じています。

0

すべての単語の最初の文字を大文字にするだけですか?その場合はucwordsをご覧ください。

関連する問題