2016-10-15 143 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

因此,只需排序,然後array_map像吉賓馬修的答案。 –

回答

1

至少有兩個錯誤。

sort()函數不會返回array,而是返回一個簡單的bool

ucfirst()函數不接受array,但只接受string

試試這個:

<?php 

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

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

這是沒有用的,測試的sort()的結果,如果你知道$arr是一個數組。如果它不是一個數組,它只會失敗,所以不要太費心。最後的?>可以(也應該!)被省略。這是爲特定框架(如Symfony)編寫代碼的更安全方法。

另外,不要打印sortAndTtitle()函數內部。正如名稱所示,只需標題(大寫)。

最後一行僅供您測試休閒。

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

所以你情況下,它看起來像

<?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()不接受字符串,ucfirst()不接受陣列。不需要將排序($ 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

謝謝您對問題的深入瞭解。我從所有的答覆中學到了一些東西。我不清楚的一件事是我需要永久性地將Array值更改爲UpperCase First Letter。這是我設法做到的代碼。如果有更快的方式,請評論。

$stringsArr = array("zulu", "alpha", "omega"); 
function sortAndTitle($arr){ 
    sort($arr); 
    for($x = 0; $x < count($arr); $x++){ 
     $arr[$x] = ucfirst($arr[$x]); 
    }; 
    return implode(", ", $arr); 
}; 
echo sortAndTitle($stringsArr);