2015-12-04 3 views
1

Добрый день тем умнее меня. Я был повсюду в Google, и здесь безрезультатно. Вот моя ситуация ... У меня есть файл в формате JSON с этим:PHP JSON сортировка из ассоциативного массива STUCK

{ 
"firstset": { 
    "xgroup": [ 
    { 
     "order": 3, 
     "title": "third in xgroup" 
    }, { 
     "order": 5, 
     "title": "fifth in xgroup" 
    }, { 
     "order": 4, 
     "title": "fourth in xgroup" 
    }, { 
     "order": 1, 
     "title": "first in xgroup" 
    }, { 
     "order": 2, 
     "title": "second in xgroup" 
    } 
    ] 
}, 
"secondset": { 
    "ygroup": [ 
    { 
     "order": 7, 
     "title": "seventh in ygroup" 
    }, { 
     "order": 4, 
     "title": "fourth in ygroup" 
    }, { 
     "order": 6, 
     "title": "sixth in ygroup" 
    }, { 
     "order": 1, 
     "title": "first in ygroup" 
    }, { 
     "order": 3, 
     "title": "third in ygroup" 
    }, { 
     "order": 2, 
     "title": "second in ygroup" 
    }, { 
     "order": 8, 
     "title": "eighth in ygroup" 
    }, { 
     "order": 5, 
     "title": "fifth in ygroup" 
    } 
    ] 
} 

}

и это PHP:

$json_url = "js/testlist.json"; 
    $json = file_get_contents($json_url); 
    $data = json_decode($json, TRUE); 

    echo '<ul>'; 
    foreach ($data['firstset']['xgroup'] as $val) { 
     echo '<li>' . $val['order'] . '.) ' . $val['title'] . '</li>'; 
    } 
    echo '</ul>'; 

Я пробовал все, от старомодного «my_sort 'функции, найденные здесь, только для сортировки всего массива безрезультатно. Есть ли способ сортировать по полю «order» в массиве «firstset» и отображать данные?

Спасибо заранее ...

+0

Где твоя попытка использовать 'usort'? – Flosculus

+0

Вы можете использовать 'array_column', чтобы использовать значения' order' в качестве ключей и вместо этого сортировать. Вы также можете сортировать с помощью специального обратного вызова, очевидно, если вы используете более старую версию PHP –

ответ

0

Чтобы расширить мой комментарий, вот что я хотел бы сделать:

$data = json_decode($json, true); 
//array_column: use values of order key as keys, title key as value 
$data['firstset']['xgroup'] = array_column(
    $data['firstset']['xgroup'], 
    'title',//pass null here to assign the entire array to the order key (ie [order => x, title => some title]) 
    'order' 
); 
//sort the result by key 
ksort($data['firstset']['xgroup']); 
foreach ($data['firstset']['xgroup'] as $order => $title) { 
    //use vars here 
} 

Demo here

Это требует PHP 5.5 или выше, так что если вы «Запустите PHP 5.4, просто напишите простой цикл:

$ordered = array(); 
foreach ($data['firstset']['xgroup'] as $arr) { 
    $ordered[$arr['order']] = $arr['title']; 
} 
ksort($ordered); 
foreach ($ordered as $order => $title) { 
    //same as before 
} 

Существует реализация PHP, которая является (AFAIK) полностью совместима с нативной функцией array_columnon github

Смежные вопросы