Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将字符串转换为多维数组,然后在数组中按子值对其排序_Php_Arrays - Fatal编程技术网

Php 将字符串转换为多维数组,然后在数组中按子值对其排序

Php 将字符串转换为多维数组,然后在数组中按子值对其排序,php,arrays,Php,Arrays,我有这样一个字符串: 事件名称|事件描述|事件类型|事件日期|事件时间|事件详细信息, 事件名称|事件描述|事件类型|事件日期|事件时间|事件详细信息, 事件名称|事件描述|事件类型|事件日期|事件时间|事件详细信息, 事件名称|事件描述|事件类型|事件日期|事件时间|事件详情 这是一个字符串。我需要将其转换为and数组,按事件日期重新排序,然后将其转换回字符串 感谢您的帮助。非常感谢。您首先要将字符串拆分为行,拆分为子数组,运行usort,然后将其全部重新连接在一起。例如: function

我有这样一个字符串:

事件名称|事件描述|事件类型|事件日期|事件时间|事件详细信息,
事件名称|事件描述|事件类型|事件日期|事件时间|事件详细信息,
事件名称|事件描述|事件类型|事件日期|事件时间|事件详细信息,
事件名称|事件描述|事件类型|事件日期|事件时间|事件详情

这是一个字符串。我需要将其转换为and数组,按事件日期重新排序,然后将其转换回字符串


感谢您的帮助。非常感谢。

您首先要将字符串拆分为行,拆分为子数组,运行usort,然后将其全部重新连接在一起。例如:

function lineSplit( &$item )
{
    $item = explode( '|', $item );
}

function lineSort( $item1, $item2 )
{
    return strcmp( $item1[ 3 ], $item2[ 3 ] );
}

function lineJoin( &$item )
{
    $item = join( '|', $item );
}

$str = '...';

// First split on the comma to get each line.
$lines = explode( ",\n", $str );

// Now split each line into subarrays
array_walk( $lines, 'lineSplit' );

// Perform the sort using a user-defined function.
usort( $lines, 'lineSort' );

// Now join the subarrays into strings.
array_walk( $lines, 'lineJoin' );

// And finally merge the lines again.
$str = join( ",\n", $lines );

小心,如果任何字段包含逗号,这将不起作用。非常感谢!这对我来说非常合适。我需要在$result=introde(“,\n”,$arr)的末尾添加一个尾随逗号;像这样$result=内爆(“,\n”,$arr)。”;除此之外,再好不过了。
<?php
$string = "event name|event description|event type|2009-08-01|event time|event details,
event name|event description|event type|2009-08-02|event time|event details,
event name|event description|event type|2009-08-01|event time|event details,
event name|event description|event type|2009-08-03|event time|event details,";
   $arr = array();
   $strs = explode(',', $string);
   print_r($strs);
   foreach ($strs as $i => $str)
   {
      if (empty($str)) continue;

      $expl = explode('|', $str);
      $arr[strtotime($expl[3]) . $i] = $str;
   }
   ksort($arr);
   $result = implode(",\n", $arr);
   print_r($result);
?>
event name|event description|event type|2009-08-01|event time|event details,
event name|event description|event type|2009-08-01|event time|event details,
event name|event description|event type|2009-08-02|event time|event details,
event name|event description|event type|2009-08-03|event time|event details
function sortStringByDate($str)
{
    $arr = explode(",\n", $str);
    foreach ($arr as $key => $val)
    {
        $arr[$key] = explode('|', $val);
    }
    $new_arr = array();
    foreach ($arr as $i => $vals)
    {
        $time = strtotime($vals[3].' '.$vals[4]);
        $new_arr[$time] = $vals;
    }
    ksort($new_arr);

    foreach ($new_arr as $key => $value)
    {
        $almost[] = implode('|', $value);
    }

    return implode(",\n", $almost);
}
$arr = explode(',', $inputString);
$map = array()
foreach ($arr as $line){
    $lineArray = explode('|', $line);
    // convert date value to numerical representation of date+time
    $lineArray[3] = ...
    $map[] = $lineArray;
}

array_multisort($map[, ...]);

$result = array()
foreach($map as $lineArray){
    $result[] = implode('|', $lineArray);
}

// the resulting string:
implode(',', $result)