Обратный массив и сортировка возможна? - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь отсортировать имена в алфавитном порядке после обратного массива.

Это код, созданный для упорядочения фамилии / имени в правильном порядке.Несколько ошибок (как с именами со вторыми именами), но это работает, кроме сортировки.

Вот код:

<?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

После реверса и если строки, это так:

RENOIR Auguste
PICASSO Pablo
GAUGUIN Paul

Когда яэто нужно:

GAUGUIN Paul
PICASSO Pablo
RENOIR Auguste

Я перепробовал все виды сортировки, не могу заставить его работать ... Я не могу найти способ сортировки после обратного массива, это вообще возможно?

Это список имен, созданных с атрибутами в WordPress / WooCommerce.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Вам нужно поместить каждый отдельный массив исполнителей в больший массив, а затем отсортировать его:

<?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...
0 голосов
/ 20 сентября 2018

Если я правильно понимаю - это можно сделать просто так:

$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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...