2012-04-16 125 views
0

我这个读了几个不同的主题(like this one和一般的文档信息有关uasort() - 我相信这是我要找的),但阵列仍然是一个有点固执(在我的用例中)。排序的对象数组

这是我有:

// This sets an array of values to a variable 
$collection_rows = get_field('collection_profiles'); 

这是print_r$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 
     ) 

) 

(相当doozey)

我正在寻找一个由数组键排序/值为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>'; 
} 

,虽然它确实改变从所显示内容的顺序没有uasort()它没有命令他们怎么想 - >使用功能( 2,3,1),无功能(1,3,2)

任何帮助将不胜感激。谢谢!

+1

请从浏览器的“查看源代码”中拷贝对象数组,而不是从显示的屏幕拷贝。这将保持我们所需要的所有线条和空白,以便能够看到那块疯狂的东西。 – 2012-04-16 20:28:41

+0

更新 - 我的错 – Zach 2012-04-16 20:38:50

回答

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; 
    } 
} 

documentation for uasort()

function cmp($a, $b) { 
    if ($a == $b) { 
     return 0; 
    } 
    return ($a < $b) ? -1 : 1; 
} 

请注意,您在使用这种逻辑:

  • 如果< b,返回1(实质上,告诉排序函数a> b)
  • 如果A> B,则返回-1(在本质上,告诉排序功能,一个< B)
+0

感谢您的输入 - 我更新了排序逻辑 - 但实际的'foreach'语句(或'print_r()')仍然不会按照顺序输出带有'collection_profile_note'的数组)。做了这个快速的Pastebin:http://pastebin.com/XJV9fMMr谢谢! – Zach 2012-04-17 13:17:22

+0

@Zach:您的排序逻辑在您的pastebin中仍然向后。 – FtDRbwLXw6 2012-04-17 13:45:21

+0

啊,k最后一部分现在是'return $ a-> collection_profile_note < $b-> collection_profile_note? -1:1;'但仍然没有骰子... – Zach 2012-04-17 13:57:43

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]); 
} 

承认这一点,几乎是翻倍的分拣时间,但也许够你需要吗?