我试图按字母顺序打印数组,并将每个字符串的第一个字母大写。它说在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()
函数内部打印。顾名思义,只需sort和title(大写)。
最后一行仅供您测试时使用
感谢您对这个问题的见解。我从所有的回答中学到了一些东西。我不清楚的一件事是,我需要永久地将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);