【问题标题】:PHP Sorting String ArrayPHP排序字符串数组
【发布时间】:2016-10-15 19:31:56
【问题描述】:

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

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

【问题讨论】:

  • 我很困惑:为什么您的代码使用函数声明和函数调用来执行此操作,而数组甚至没有通过引用传递?你为什么不直接这样做呢? $mapped = array_map("ucfirst", sort($stringsArr))) 完成。
  • @Mike'Pomax'Kamermans 查看sort() 返回的内容。它就地修改数组并返回bool,因此您的代码也不起作用。
  • 所以就地排序,然后像吉宾马修的回答一样使用array_map。

标签: php arrays sorting case


【解决方案1】:

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)。

【讨论】:

  • 谢谢,这似乎是对我的代码的最快修复。我现在将研究 sort() 的参数。
  • @Nathan Wonz,如果这个答案有帮助,您可以点击对勾图标接受。
【解决方案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() 函数返回的不是array,而是一个简单的bool

    ucfirst() 函数不接受array,而只接受string

    试试这个:

    <?php
    
    function sortAndTitle($arr) {
        sort($arr);
        return array_map('ucfirst', $arr);
    }
    
    print_r(sortAndTitle([ "alhpa", "beta", "gamma" ]);
    

    如果你知道$arr 是一个数组,那么测试sort() 的结果是没有用的。只有不是数组才会失败,所以不要太在意它。最后的?&gt; 可以(而且应该!)被省略。这是为特定框架(例如 Symfony)编写代码的一种更安全的方式。

    另外,不要在 sortAndTtitle() 函数内打印。顾名思义,只需 sorttitle(大写)。

    最后一行只是为了您的测试休闲。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多