PHP排序字符串数组


PHP Sorting String Array

我试图按字母顺序打印数组,并将每个字符串的第一个字母大写。它说在foreach()中有一个无效的参数。

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

sort()不接受字符串,ucfirst()不接受数组。不需要在变量中存储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)

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);  
?>

至少有两个错误。

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()函数内部打印。顾名思义,只需sorttitle(大写)。

最后一行仅供您测试时使用

感谢您对这个问题的见解。我从所有的回答中学到了一些东西。我不清楚的一件事是,我需要永久地将Array值更改为大写首字母。这是我设法做到的代码。如果有更快的方法,请评论。

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