2012-03-07 3 views
0

Я пытаюсь реорганизовать массив PHP (на странице WordPress). Мой сайт был закодирован кем-то другим, и я пытаюсь улучшить ситуацию. Я думаю, что они делали что-то непонятное (плохое использование категорий). Вместо того, чтобы перекодировать весь сайт, я хотел посмотреть, сможет ли кто-нибудь помочь мне решить проблему.Как отсортировать сложный массив PHP

Итак, в основном, у меня есть массив внутри массива. Список категорий, и каждая категория содержит конкретные данные. Я называю категории, основанные на его родительском. Мне нужно реорганизовать список/массив категорий, чтобы они могли распечатываться в том порядке, в котором они мне нужны.

$cat_tree = get_category_parents(wt_get_category_ID(), FALSE, ':', TRUE); 
$top_cat = split(':',$cat_tree); 
$parent = $top_cat[0]; 
$idObj = get_category_by_slug($parent); 

$args = array(
    'child_of'     => $idObj->term_id, 
    'orderby'     => 'name', 
    'order'     => 'ASC', 
    'hide_empty'    => 0); 
    $counter_c=1; 

$categories = get_categories($args); 

if($counter_c == 1) $counter_c = ''; 
    foreach ($categories as $category) { 

?> 

<div> this is where each category array info gets printed... information goes:<br /> 
Name: <?=$category->cat_name ?> (<?=$category->cat_ID ?>) 
</div> 


<?php if($counter_c == '') $counter_c = 1; $counter_c++; } // Reset Query 
wp_reset_query(); 
?> 

На одной странице $ cat_tree выходы «развлечение: актеры:».

$ Родитель или $ Topcat [0] выводит "развлечение"

$ Topcat [1] выводит "актер"

Когда "Еогеасп" работает, я получаю список, отсортированный по идентификатору .. .

  • Актеры (13)
  • художников (14)
  • директоров (25)
  • Авторы (26)
  • диджеев (35)

мне нужно реорганизовать этот список в определенном порядке. Каждая страница отличается. Поэтому мне, возможно, придется перестраивать список по-разному для каждой страницы. Я, возможно, потребуется ...

  • Авторов (26)
  • Актеры (13)
  • диджеев (35)
  • художников (14)
  • директоров (25)

Итак, мне нужен способ сделать это. Я подумал, что, может быть, я мог бы сказать «если» на странице «актер», сдвинуть «Writers» до конца массива (я знаю, что есть какой-то способ сделать это), а затем свернуть актеров до конца, затем DeeJays, затем Художники, затем директора. Затем запустите foreach.

Или, если страница - это что-то еще, я могу переместить другие элементы в конец массива. Это кажется немного, но это единственная работа, о которой я мог думать. Конечно, мои знания php ограничены, поэтому любая помощь ценится.

+1

Как насчет массива ввода образцов и списка четких правил сортировки? – Josh

+0

Ну, так как вы не будете делать что-то вроде сортировки в алфавитном или цифровом виде по ID (как в вашем втором примере), я не уверен, что многое может сделать PHP, чтобы помочь. Для меня это похоже на обычай ... – enygma

ответ

1

Вы можете попробовать пользовательский вид:

$order = array('Writers', 'Actors', 'DeeJays', 'Artists', 'Directors'); 

function catsort($a, $b) { 
    global $order; 
    $ak = array_search($a->cat_name, $order); 
    $bk = array_search($b->cat_name, $order); 
    if($ak === false) $ak = 0; 
    if($bk === false) $bk = 0; 
    return $ak - $bk; 
} 

usort($categories, 'catsort'); 

Каждая страница просто нужно будет другой массив заказа.

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