如何对复杂的PHP数组进行排序

时间:2012-03-07 20:43:45

标签: php arrays sorting

我正在尝试重新组织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输出“娱乐:演员:”。

$ parent或$ topcat [0]输出“娱乐”

$ topcat [1]输出“演员”

当“foreach”运行时,我会得到一个按ID分类的列表...

  • 演员(13)
  • 艺术家(14)
  • 董事(25)
  • 作家(26)
  • DeeJays(35)

我需要将此列表重新组织为特定的顺序。每个页面都不同。所以我可能不得不为每个页面重新组织一个列表。我可能需要......

  • 作家(26)
  • 演员(13)
  • DeeJays(35)
  • 艺术家(14)
  • 董事(25)

所以,我需要一种方法来做到这一点。我想也许我可以在“演员页面”上说“if”,将“Writers”滑到数组的末尾(我知道有一些方法可以做到这一点),然后将Actors滑到最后,然后是DeeJays,然后艺术家,然后是导演。然后运行foreach。

或者,如果页面是其他内容,我可以将其他元素滑动到数组的末尾。这似乎有点多,但这是我能想到的唯一工作。当然,我的PHP知识是有限的,所以任何帮助都表示赞赏。

1 个答案:

答案 0 :(得分: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');

每个页面只需要一个不同的订单数组。