簡體   English   中英

數組反轉和排序可能嗎?

[英]Array Reverse and sorting is possible?

我想在反向數組后按字母順序對名稱進行排序。

這是用於以正確的順序排序姓氏/名字的代碼。 一些錯誤(例如,帶有中間名的名稱),但除排序外,它仍然有效。

這是代碼:

<?php
    $terms = get_terms( 'pa_artist' );
    if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
         echo '<ul class="artists">';
        foreach ( $terms as $term ) {
            $array = explode(" ", $term->name);
            if ($array[3]) { 
                $array[3] = strtoupper($array[3]);
                $array[3] = "<strong>".$array[3]."</strong>";
            }
            elseif ($array[2]) { 
                $array[2] = strtoupper($array[2]);
                $array[2] = "<strong>".$array[2]."</strong>";
            } elseif ($array[1]) { 
                $array[1] = strtoupper($array[1]);
                $array[1] = "<strong>".$array[1]."</strong>";
            } else { 
                $array[0] = strtoupper($array[0]);
                $array[0] = "<strong>".$array[0]."</strong>";
            } 
            $rarray = array_reverse($array);
           sort($rarray); 
            echo '<li><a href="' .get_term_link( $term ). '" title="' . sprintf( __( 'View all post filed under %s', 'my_localization_domain' ), $term->name ) . '">' . implode(" ", $rarray) . '</a></li>';
        }
     echo '</ul>';
 }

現在,名稱的排序就像從未進行過相反的操作一樣。

一些示例,起初顯示如下:

Auguste Renoir
Pablo Picasso
Paul Gauguin

在反向和If字符串之后,是這樣的:

RENOIR Auguste
PICASSO Pablo
GAUGUIN Paul

當我需要它時:

GAUGUIN Paul
PICASSO Pablo
RENOIR Auguste

我嘗試了各種排序功能,無法使其正常工作……我找不到在反向數組之后進行排序的方法,甚至可能嗎?

它用於在wordpress / woocommerce上使用屬性構建的名稱列表。

如果我正確理解-可以像這樣簡單地完成:

$artists = array(
    array('Auguste', '', 'Renoir'),
    array('Pablo', '', 'Picasso'),
    array('Paul', '', 'Gauguin'),
);

usort($artists, function($a, $b) {
    return strcasecmp($a[2], $b[2]);
});

// print_r($artists);

您需要將每個藝術家陣列放入一個更大的陣列中,然后進行排序:

<?php
$terms = get_terms( 'pa_artist' );
$artists = array();
foreach ( $terms as $term ) {
    $array = explode(" ", $term->name);
    if ($array[3]) { 
        $array[3] = strtoupper($array[3]);
        $array[3] = "<strong>".$array[3]."</strong>";
    }
    elseif ($array[2]) { 
        $array[2] = strtoupper($array[2]);
        $array[2] = "<strong>".$array[2]."</strong>";
    } elseif ($array[1]) { 
        $array[1] = strtoupper($array[1]);
        $array[1] = "<strong>".$array[1]."</strong>";
    } else { 
        $array[0] = strtoupper($array[0]);
        $array[0] = "<strong>".$array[0]."</strong>";
    } 
    $rarray = array_reverse($array);
    $artists[] = $rarray;

}
usort($artists, function($a, $b) {
    return strcasecmp($a[2], $b[2]);
});

// now run your foreach loop again to output the markup you want...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM