2016-10-15 10 views
-1

アルファベット順に配列を印刷し、各文字列の最初の文字を大文字にしています。 foreach()に無効な引数があります。PHPソート文字列配列

<?php 
$stringsArr = array("zulu", "alpha", "omega"); 
function sortAndTitle($arr){ 
    $newArr = ucfirst(sort($arr)); 
    foreach($newArr as $value){ 
     echo $value . "<br/>"; 
    }; 
}; 
sortAndTitle($stringsArr); 
?> 
+0

私は混乱しています:なぜあなたのコードは、関数の宣言で、次に配列が参照渡しさえされない関数呼び出しでこれを行うのですか?なぜこれを直接行うのではないのですか? '$ mapped = array_map(" ucfirst "、sort($ stringsArr)))' doneです。 –

+0

@ Mike'Pomax'Kamermansは 'sort()'が返すものを見直します。これは、配列をインプレースで修正し、 'bool'を返しますので、あなたのコードは動作しません。 – pid

+0

ちょうどその場所でソートし、その後、Jibin Matthewの答えのようなarray_map。 –

答えて

1

少なくとも2つのエラーがあります。

sort()関数はarrayを返しませんが、簡単なboolを返します。

ucfirst()関数はarrayを受け入れず、stringのみを受け入れます。

代わりにこれを試してみてください:

<?php 

function sortAndTitle($arr) { 
    sort($arr); 
    return array_map('ucfirst', $arr); 
} 

print_r(sortAndTitle([ "alhpa", "beta", "gamma" ]); 

は、それはあなたが$arrが配列であることがわかっている場合sort()の結果をテストするために使用ですありません。配列でなければ失敗するだけなので、あまり気にしないでください。最終的な?>は省略することができます(そして!すべきです)。 symfonyなどの特定のフレームワーク用のコードを書くより安全な方法です。

また、sortAndTtitle()機能の内部には印刷しないでください。名前が言うように、ちょうどソートタイトル(大文字)。

最後の行は、テスト用です。

2
if(sort($stringsArr)){ 
    print_r(array_map('ucfirst', $stringsArr)); 
}else{ 
    echo "sort failed"; 
} 

ですから、小文字のはucfirst()が配列を受け入れていない、文字列を受け入れない

<?php  
function sortAndTitle($arr){ 
    if(sort($arr)){ 
     print_r(array_map('ucfirst', $arr)); 
    }else{ 
     echo "sort failed"; 
    } 
} 
$stringsArr = array("zulu", "alpha", "omega"); 
sortAndTitle($stringsArr); 
?> 
3

sort()ようになります。内部でソートされているため、変数にsort($ arr)を格納する必要はありません。並べ替えにフラグタイプを追加するのも当然です。 のためにこれを試してみてください:

<?php 
$stringsArr = array("zulu", "alpha", "omega"); 

function sortAndTitle($arr){ 
    sort($arr, SORT_NATURAL); 
    foreach($arr as $value){ 
     echo ucfirst($value). "<br/>"; 
    } 
} 
sortAndTitle($stringsArr); 
?> 

注:PHPの関数のすべてのパラメータは、値として渡されます。配列(または関数に渡されるパラメータ)を変更する場合は、配列パラメータの先頭にアンパサンド(&)を付けて関数を宣言してください。したがって、あなたの場合、sortAndTitle(& $ stringsArr)。

+0

ありがとう、これは私のコードへの最も速い修正と思われる。 sort()のパラメータを調べてみましょう。 –

+0

@Nathan Wonz、この回答が役立つ場合は、チェックアイコンをクリックして受け入れることができます。 –

0

問題をよく把握していただきありがとうございます。私はすべての回答から何かを学びました。私が明確にしなかったことの1つは、Array値をUpperCase First Letterに永久に変更する必要があることでした。ここで私はそれを行うことができたコードです。より速い方法があればコメントしてください。