我正在使用返回与2个值匹配的分类法的代码。
一切都按预期工作,但我无法弄清楚如何订购我的结果。现在它们以某种设定顺序显示,可能是日期不确定。我试图让它们按字母顺序显示(按名称)..
我的php模板中的代码粘贴在http://pastie.org/5083124
我所说的数组就是这个
<?php
foreach ( $all_terms as $all_term) {
//print_r($all_terms);
$tax_test = get_option('woo_categories_panel_taxonomies_'.$all_term->taxonomy);
$post_images = array();
$posts_aray = array();
$parent_id = $all_term->term_taxonomy_id;
$term_name = $all_term->name;
$term_parent = $all_term->parent;
$term_slug = $all_term->slug;
$term_id = $all_term->term_id;
$term_link = get_term_link( $all_term, $all_term->taxonomy );
$counter_value = $all_term->count;
?>
<div class="childListings">
<div class="block">
<a href="<?php echo $term_link; ?>">
<?php
$block_counter++;
?>
</a>
<h2><a href="<?php echo $term_link; ?>"><?php echo $term_name ?> <br/><span>(<?php echo $counter_value; ?> Solicitors)</span></a></h2>
</div><!-- /.block -->
</div><!-- /.child Listings-->
<?php
if ( $block_counter % 6 == 0 ) {
?>
<div class="fix"></div>
<?php
} // End IF Statement
// End IF Statement
?>
<?php
} // End For Loop
?>
我用$ args和ksort查看了几个不同的选项,但是我有点迷失了,似乎无法在网站的前端得到我的结果按字母顺序排序。
任何人都可以在我的代码中识别出我的结果是如何排序的吗?
谢谢
答案 0 :(得分:4)
当您查询数据库时,可以通过稍早排序来避免在PHP中进行排序。这应该更快。
变化:
$all_terms = $wpdb->get_results("SELECT * FROM ipt1y7_term_taxonomy,ipt1y7_terms WHERE ipt1y7_term_taxonomy.parent='{$ex[2]}' AND ipt1y7_term_taxonomy.term_id=ipt1y7_terms.term_id");
...为:
$all_terms = $wpdb->get_results("SELECT * FROM ipt1y7_term_taxonomy,ipt1y7_terms WHERE ipt1y7_term_taxonomy.parent='{$ex[2]}' AND ipt1y7_term_taxonomy.term_id=ipt1y7_terms.term_id ORDER BY ipt1y7_terms.name");
即。只需将ORDER BY name
添加到原始查询中即可。结果将按名称排序,不需要您在PHP中进一步执行任何操作,排序将在数据库服务器上进行。 WordPress数据库表terms
在name
列上有一个索引,所以这应该非常快;有效地为您预先排序数据。 (参见description of the terms
table in the WP database schema。)
答案 1 :(得分:0)
查看http://php.net/manual/en/function.sort.php
中的示例$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
foreach ($fruits as $key => $val) {
echo "fruits[" . $key . "] = " . $val . "\n";
}
以上示例将输出:
fruits[0] = apple
fruits[1] = banana
fruits[2] = lemon
fruits[3] = orange
答案 2 :(得分:0)
使用usort和您自己的比较函数可以实现这一点:
<?php
/**
* For a bit of testing.
*/
$all_terms = array( );
$names = array( 'foo', 'baz', 'bar', 'qux', 'aaa' );
foreach( $names as $name ) {
$tmp = new stdClass();
$tmp->name = $name;
$all_terms[] = $tmp;
}
/**
* Here, we do the sorting:
*/
usort( $all_terms, function( $a, $b ) {
if( $a->name === $b->name ) {
return 0;
}
return ( $a->name < $b->name ) ? -1 : 1;
});
/**
* And the results:
*/
var_dump( $all_terms );