2017-06-06 40 views
1

排序JSON我怎樣才能標籤排序依次爲:部隊PHP

1080p 
720p 
480p 
360p 


我已經試過PHP文件中所有的數組排序和一些其他「用戶自定義」分類功能,但沒有運氣,它顯示完全隨機,不按順序。

我原來的JSON:

[{"file":"***","label":"360p","default":"true","type":"video\/mp4"}, 
{"file":"***","label":"720p","type":"video\/mp4"}, 
{"file":"***","label":"1080p","type":"video\/mp4"}, 
{"file":"***","label":"480p","type":"video\/mp4"}] 
+0

你試過去掉「p」然後排序嗎? – MikeBergerUS

+0

從數組中每個標籤的explode()中移除「p」,然後使用'intval()'函數獲取字符串的int值。然後根據索引 –

回答

1

這裏我們使用usort以達到所需的輸出。

Try this code snippet here

<?php 

ini_set('display_errors', 1); 
$json='[{"file":"***","label":"360p","default":"true","type":"video\/mp4"}, 
{"file":"***","label":"720p","type":"video\/mp4"}, 
{"file":"***","label":"1080p","type":"video\/mp4"}, 
{"file":"***","label":"480p","type":"video\/mp4"}]'; 
$array=json_decode($json,true); 

usort($array, function($value1,$value2){ 
    $value1["label"]=rtrim($value1["label"],"p"); 
    $value2["label"]=rtrim($value2["label"],"p"); 

    return $value1["label"]<$value2["label"]; 
}); 
2

這看起來非常簡單的給我,您使用自定義比較函數的排序:

<?php 
$data = json_decode(<<<JSON 
[{"file":"***","label":"360p","default":"true","type":"video\/mp4"}, 
{"file":"***","label":"720p","type":"video\/mp4"}, 
{"file":"***","label":"1080p","type":"video\/mp4"}, 
{"file":"***","label":"480p","type":"video\/mp4"}] 
JSON 
); 

usort($data, function($a, $b) { 
    return intval($a->label) < intval($b->label); 
}); 
print_r($data); 

輸出顯然是:

Array 
(
    [0] => stdClass Object 
     (
      [file] => *** 
      [label] => 1080p 
      [type] => video/mp4 
     ) 

    [1] => stdClass Object 
     (
      [file] => *** 
      [label] => 720p 
      [type] => video/mp4 
     ) 

    [2] => stdClass Object 
     (
      [file] => *** 
      [label] => 480p 
      [type] => video/mp4 
     ) 

    [3] => stdClass Object 
     (
      [file] => *** 
      [label] => 360p 
      [default] => true 
      [type] => video/mp4 
     ) 

) 
+0

排序真的非常感謝您的幫助,但Sahil的回答已經解決了我的問題。 –

+0

@ScottWillsleans您應該在您的項目中使用此方法。沒有必要在'usort()'的每次迭代中聲明/覆蓋變量這是更簡潔的解決方案。 – mickmackusa

-1

第一您必須使用json_decode來解碼JSON字符串。

使用usort對解碼數組進行第二次排序。

<?php 
$array = json_decode($json); 
usort($array, function ($a, $b) { 
    $valueA = (int) $a->label; 
    $valueB = (int) $b->label; 
    if ($valueA == $valueB) { 
     return 0; 
    } 
    return ($valueA < $valueB) ? -1 : 1; 
}); 
+0

感謝您的幫助,已經解決! –