2016-10-02 1 views
0

こんにちは仲間:)私は、指定されたフォーマットのいくつかの項目を含む配列を並べ替える必要があります。PHPの部分文字列を表す配列の並び替え

メートル= 11:00_12:00、D = 10:00_10:30、A = 13:00_13:30

我々が見ることができるように、任意の項目の所定のフォーマットは、例えば、このような

D = 10:00_10:30、M = 11:期待される結果があるべきであるので、X = whateverinitialhour_whateverfinalhour

ような文字列の前に述べたように、私は、最初の時間に応じて、これらの項目の順序を変更しなければなりません00_12:00、a = 13:00_13:30

まあ、私は多くのことを検索し、 usort た、と私はあまりにもそうHow to sort multidimensional PHP array (recent news time based implementation)

のように同様の質問が発見されている、私はこれをコーディングしています:

$arr = array(); 
$newarr = array(); 
$arr = ('m=11:00_12:00','d=10:00_10:30','a=13:00_13:30'); 
usort($arr, function($a,$b) {return strtotime(substr($a[0],2,5))-strtotime(substr($b[0],2,5));}); 
foreach ($arr as $value) { 
    $newarr[] = $value; 
} 

を残念ながら、私はよ期待される結果を取得し、新たな配列は、これを含まない:

メートル= 11:00_12:00、A = 13:00_13:30、D = 10:00_10:30

各項目の最初の時間で並べ替えられていないもの:(

私は間違っていますか?私は厳格な方法でusortを使用していませんか?ありがとう。あなたのusort()機能で

答えて

1

見て、

usort($arr, function($a,$b) { 
    return strtotime(substr($a[0],2,5))-strtotime(substr($b[0],2,5)); 
          ^^^^^      ^^^^^ 
}); 

$a$bが配列ではありません、彼らは、配列の要素です。また、並べ替えられた配列を格納するために新しい配列を必要とせず、元の配列自体にusort()が操作を適用します。だからあなたのコードは次のようにする必要があります:

$arr = array('m=11:00_12:00','d=10:00_10:30','a=13:00_13:30'); 
usort($arr, function($a,$b){ 
    return (strtotime(substr($a,2,5)) < strtotime(substr($b,2,5))) ? -1 : 1; 
}); 

var_dump($arr); 
+0

アメージング氏Rajdeep、ありがとう:) – b1919676

+0

b1919676 @あなたは非常に歓迎しています! :-) –

関連する問題