0

私はこれについていくつかの異なるトピックを読みました (これと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
        )

)

(かなりおどけた)

の配列キー/値でソートしようとしています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)

どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

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

これはソート時間をほぼ2倍にすることを認めていますが、おそらくあなたのニーズには十分ですか?

于 2012-04-16T21:22:55.977 に答える
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;
    }
}

ドキュメントからuasort()

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

このロジックを使用していることに注意してください。

  • a < b の場合、1 を返します (つまり、ソート関数に a > b を伝えます)
  • a > b の場合、-1 を返します (つまり、ソート関数に a < b を伝えます)
于 2012-04-16T21:21:24.530 に答える