2009-08-31 13 views
-2

私が持っているこのような文字列:ターン文字列は、アレイ内のサブ値でそれを並べ替える

イベント名|イベントの説明|イベントの種類|イベント日|イベント時間|イベントの詳細、
イベント名|イベントの説明|イベントタイプ|イベントの日付|イベント時刻|イベントの詳細
イベント名|イベントの説明|イベントタイプ|イベントの日付|イベントの時刻|イベントの詳細
イベントの名前|イベントの種類|イベントのタイプ|イベント日付|イベント時刻|イベントの詳細

これはすべて1つの文字列です。私はそれを配列に変換して配列化し、イベント日付で再ソートして、それを文字列に戻す必要があります。

何か助けていただければ幸いです。本当にありがとう。

答えて

0
<?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 
+0

一つだけのループ:) – inakiabt

+0

本当にありがとうございました!これは私にとって完璧に機能します。 $ result = implode( "、\ n"、$ arr)の最後にテーリングカンマを追加する必要がありました。この$ result = implode( "、\ n"、$ arr)のようになります。 '、';それ以外は完璧です。 –

+0

あなたが気に入って嬉しいです – inakiabt

1

まず、文字列を行に分割し、サブ配列に分割し、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); 
2
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); 
} 
0
$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) 
+0

フィールドのいずれかにカンマが含まれていると、この機能は無効になります。 –

関連する問題