我已经阅读了一些关于此问题的不同主题(like this one以及关于uasort()的一般文档信息 - 我相信这是我正在寻找的内容),但数组仍然是有点顽固(在我的用例中)。
这就是我所拥有的:
// This sets an array of values to a variable
$collection_rows = get_field('collection_profiles');
这是print_r
的{{1}}:
$collection_rows
(非常糟糕)
我希望按Array
(
[0] => Array
(
[collection_profile] => Array
(
[0] => stdClass Object
(
[ID] => 273
[post_author] => 1
[post_date] => 2012-03-26 07:53:45
[post_date_gmt] => 2012-03-26 13:53:45
[post_content] =>
[post_title] => Profile 1
[post_excerpt] =>
[post_status] => publish
[comment_status] => closed
[ping_status] => closed
[post_password] =>
[post_name] => profile-1
[to_ping] =>
[pinged] =>
[post_modified] => 2012-04-12 08:07:35
[post_modified_gmt] => 2012-04-12 14:07:35
[post_content_filtered] =>
[post_parent] => 0
[guid] => http://domain.com/?post_type=moulding_profiles&p=273
[menu_order] => 0
[post_type] => moulding_profiles
[post_mime_type] =>
[comment_count] => 0
[ancestors] => Array
(
)
[filter] => raw
)
)
[collection_profile_note] => 1
)
[1] => Array
(
[collection_profile] => Array
(
[0] => stdClass Object
(
[ID] => 188
[post_author] => 1
[post_date] => 2012-02-17 15:24:24
[post_date_gmt] => 2012-02-17 21:24:24
[post_content] =>
[post_title] => Test Profile
[post_excerpt] =>
[post_status] => publish
[comment_status] => closed
[ping_status] => closed
[post_password] =>
[post_name] => test-profile
[to_ping] =>
[pinged] =>
[post_modified] => 2012-02-28 14:13:32
[post_modified_gmt] => 2012-02-28 20:13:32
[post_content_filtered] =>
[post_parent] => 0
[guid] => http://domain.com/?post_type=moulding_profiles&p=188
[menu_order] => 0
[post_type] => moulding_profiles
[post_mime_type] =>
[comment_count] => 0
[ancestors] => Array
(
)
[filter] => raw
)
)
[collection_profile_note] => 3
)
[2] => Array
(
[collection_profile] => Array
(
[0] => stdClass Object
(
[ID] => 207
[post_author] => 1
[post_date] => 2012-02-23 13:35:55
[post_date_gmt] => 2012-02-23 19:35:55
[post_content] =>
[post_title] => Casing Test Profile
[post_excerpt] =>
[post_status] => publish
[comment_status] => closed
[ping_status] => closed
[post_password] =>
[post_name] => casing-test-profile
[to_ping] =>
[pinged] =>
[post_modified] => 2012-02-23 13:35:55
[post_modified_gmt] => 2012-02-23 19:35:55
[post_content_filtered] =>
[post_parent] => 0
[guid] => http://domain.com/?post_type=moulding_profiles&p=207
[menu_order] => 0
[post_type] => moulding_profiles
[post_mime_type] =>
[comment_count] => 0
[ancestors] => Array
(
)
[filter] => raw
)
)
[collection_profile_note] => 2
)
)
的数组键/值排序。我所尝试的(到目前为止)是:
collection_profile_note
虽然它确实更改了显示的顺序而没有$collection_rows = get_field('collection_profiles');
print_r($collection_rows);
if ($collection_rows) {
echo '<h2>'.__('Profiles in Collection','roots').'</h2>';
echo '<ul>';
function cmp($a, $b) {
if ($a->collection_profile_note == $b->collection_profile_note) {
return 0;
} else {
return $a->collection_profile_note < $b->collection_profile_note ? 1 : -1;
}
}
usort($collection_rows, 'cmp');
foreach($collection_rows as $collection_row) {
// Extract single post value
$collection_profile_field = $collection_row['collection_profile'];
$collection_profile_page = isset($collection_profile_field[0]) ? $collection_profile_field[0]->ID : NULL;
?>
<li><a href="<?php echo get_permalink($collection_profile_page); ?>"><?php echo get_the_title($collection_profile_page); ?></a> <?php echo $collection_row['collection_profile_note']; ?></li>
<?php }
echo '</ul>';
}
,但它没有按照我想要的顺序排序 - &gt;功能(2,3,1),无功能(1,3,2)
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
好吧,你已经向后实施了排序逻辑:
function cmp($a, $b) {
if ($a->collection_profile_note == $b->collection_profile_note) {
return 0;
} else {
return $a->collection_profile_note < $b->collection_profile_note ? 1 : -1;
}
}
function cmp($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
请注意,您正在使用此逻辑:
答案 1 :(得分:0)
您是否有必要对阵列进行排序?可能更容易打破你正在排序的键和值,对它们进行排序,然后循环遍历该数组(如此):
$sortme=array();
foreach( $collection_rows as $key=>$profile )
{
$sortme[$key] = $profile['collection_profile_note'];
}
asort($sortme);
foreach( $sortme as $node=>$ignore )
{
print_r($collection_rows[$node]);
}
承认这几乎是整理时间的两倍,但也许足以满足您的需求?