Как отсортировать сложный массив PHP - PullRequest
0 голосов
/ 08 марта 2012

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

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

$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 выводит "entertainment: актеры:".

$ parent или $ topcat [0] выводит "entertainment"

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

Когда запускается «foreach», я получаю список, отсортированный по идентификатору ...

  • Актеры (13)
  • Художники (14)
  • Директора (25)
  • Писатели (26)
  • DeeJays (35)

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

  • Писатели (26)
  • Актеры (13)
  • DeeJays (35)
  • Художники (14)
  • Директора (25)

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

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

1 Ответ

1 голос
/ 08 марта 2012

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

$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');

Для каждой страницы просто необходим отдельный массив заказов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...