重新排序逗号分隔值

时间:2014-01-28 09:38:32

标签: php csv

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

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

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

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

该功能还可以帮助我指定多个数字的位置。

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以使用这三个步骤

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

试试这个

<?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 :(得分:0)

这是长代码

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