【问题标题】:Reorder comma separated values重新排序逗号分隔值
【发布时间】:2014-02-19 12:43:48
【问题描述】:

我有一个逗号分隔的数值列表。这个字符串只有数字列表。

示例:52,187,65,278,288,45,621

我想要一个 php 函数来重新格式化字符串,以便我可以指定数字的位置。

如果我希望 45 作为第一个值,那么我应该能够指定 45 = 0,那么该函数将为我提供一个结果,即 45,52,187,65,278,288,621

该函数还应该帮助我指定多个数字的位置。

【问题讨论】:

  • 这样一个问题我通常会得到 5 票否决...请提供您迄今为止的工作。
  • 如果你指定 278 = 335 会发生什么?或 65 = 2。
  • 你可以用这个值用explode()创建一个数组,排序,然后再次implode()
  • ^ 这就是你的答案。

标签: php csv


【解决方案1】:

我能想到的最简单的方法是在字符串上使用explode() 来创建一个数组,并使用array_search() 来查找值。可能是一个很好的起点。

【讨论】:

    【解决方案2】:

    首先,您希望通过使用逗号$arr = explode(",",$string); 将其分解来生成字符串数组,然后您想匹配选项并设置数组中的位置,尝试使用array_search 搜索以获取索引,拉使用array_splice 将其取出,然后按照指定插入正确的索引。 完成所有排序后,使用 implode 将数组重新加入:$string = implode(",", $arr);

    【讨论】:

      【解决方案3】:

      试试这个

      <?php
      
      $str='52,187,65,278,288,45,621';
      $val ='45';
      $array = array();
      $array = explode(',',$str);
      sort($array);
      $i=0;
      foreach ($array as $k) {
      
          if ($k<$val){
              unset ($array[$i]);
          }
      
          $i=$i+1;    
      }
      print_r($array);
      ?>
      

      【讨论】:

        【解决方案4】:

        这里是长代码

        <?php
        $str = '52,187,65,278,288,45,621';
        $orders =  array(45 => 3,52=>2);
        
        print_r(reOrder($str,$orders));
        
        function reOrder($string,$orders){
            $array = explode(',', $string);
            $result = array();
            foreach($array as $index=>$element){
                if(isset($orders[$element])){
                    if(!isset($result[$orders[$element]] )){
                        $result[$orders[$element]] = $element;
                    }
                    else{
                        $temp = $result[$orders[$element]];
                        $result[$orders[$element]] = $element;
                        $count = count($result);
                        $flag = 0;
                        for($i=0;$i<$count;$i++){
                            if(!isset($result[$i])){
                                $result[$i] = $temp;
                                $flag = 1;
                                break;
                            }
                        }
                        if($flag == 0){
                            $result[] = $temp;
                        }
                    }
                }
                else{
                    $count = count($result);
                    $flag = 0;
                    for($i=0;$i<$count;$i++){
                        if(!isset($result[$i])){
                            $result[$i] = $element;
                            $flag = 1;
                            break;
                        }
                    }
                    if($flag == 0){
                        $result[] = $element;
                    }
                }
            }
            ksort($result);
            return $result;
        }
        ?>
        

        【讨论】:

          【解决方案5】:

          你可以使用这三个步骤

          <?php
          $myArray = explode(",", $myString);
          $shortedArray = sort($myArray);
          $shortedString = implode(",", $shortedArray);
          echo $shortedString;
          ?>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-06-22
            • 2015-12-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-07-04
            相关资源
            最近更新 更多