Использовать сортировку не работает в чувствительной к регистру строке, которая захватывается функцией разнесения - PullRequest
1 голос
/ 28 апреля 2019

Этот код прекрасно работает, пока что-то не чувствительно к регистру.Я попытался использовать strnatcasecmp вместо cmp, и он захватывает всю строку, а не фамилию.какие-либо предложения о том, как написать это лучше?

например, текущий заказ:
Аарон Карсон
Адам Дэвидсон
Джен Хеннингс
Эктор Блюмут


Я хочу, чтобы ektor bluemouth был на вершине.

foreach($connected->posts as $p) {
$lastname = explode(' ', $p->post_title);
if(sizeof($lastname) == 1) {$p->lastname = $lastname[0];}
if(sizeof($lastname) == 2) {$p->lastname = $lastname[1];}
if(sizeof($lastname) == 3) {$p->lastname = $lastname[2];}
}                           
usort($connected->posts, 'cmp');

1 Ответ

0 голосов
/ 28 апреля 2019

Я бы сделал что-то вроде этого

$aPosts = array(
    array('post_title' => 'Aaron Carson'),
    array('post_title' => 'Adam Davidson'),
    array('post_title' => 'Jen Hennings'),
    array('post_title' => 'ektor bluemouth'),
);

$aOrderedPosts = array();


foreach($aPosts as $iPos => $p){
    $a = explode(' ', $p['post_title']);
    // cast the last name to lowercase and assign by reference the post
    $aOrderedPosts[strtolower($a[1])] =& $aPosts[$iPos];
    }

var_dump($aOrderedPosts);
// perform a key sort
ksort($aOrderedPosts);
var_dump($aOrderedPosts);

Он может быть адаптирован для работы с вашим форматом данных

$aOrderedPosts = array();

foreach($connected->posts as $iPos => $p){
    $a = explode(' ', $p->post_title);
    $aOrderedPosts[strtolower($a[1])] =& $connected->posts[$iPos];
}

ksort($aOrderedPosts);
var_dump($aOrderedPosts);

Лучше всего создать $aOrderedPosts при создании / чтении вразмещать объекты из БД.Кроме того, я бы создал его как свойство класса connection.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...