Сортировка массива длине строки php

PHP: Sort array by value length

I am trying to sort an array by the length of characters in each value (and perhaps, if possible, in alphabetical order if two values have the same length of characters). For example:

Array ( [0] => this [1] => is [2] => a [3] => bunch [4] => of [5] => words; 
Array ( [0] => a [1] => is [2] => of [3] => this [4] => bunch [5] => words; 

5 Answers 5

array_multisort(array_map('strlen', $array), $array); 
  • Get the length of each string in an array by mapping strlen() using array_map()
  • Sort on the string lengths and sort the original array by the string length sorted array using array_multisort()

Looks like others have already answered but I started writing this so I’m going to post it, dang it! 🙂

$data = ["this", "is", "a", "bunch", "of", "words"]; usort($data, function($a, $b) < $difference = strlen($a) - strlen($b); return $difference ?: strcmp($a, $b); >); 

I’m using the Elvis operator ?: to just return the difference based on the string lengths if it’s not 0. If it is 0, just return the return value of strcmp

You can use a custom sort function for this.

function mycmp($a, $b) < $cmp = strlen($a) - strlen($b); if ($cmp === 0) $cmp = strcmp($a, $b); return $cmp; >usort($array, 'mycmp'); 
$myarray = explode(" ", "this is a bunch of words"); usort($myarray, function($a, $b) < return strlen($a) - strlen($b) >); print_r($array); 

Explanation: usort sorts in place (i.e. by reference) an array, given a custom comparator. A comparator must return a negative number if the first item should be before the second item, and a positive otherwise. A value of 0 means they are equal regarding the order.

Читайте также:  Install php on your computer

You can add custom criteria, not related to strlen() when the lengths are the same. That’s up to you and involves just an additional if block.

It is important to note that the function must define an order relationship, as in math:

  1. criteria(a, b)>0 and criteria(b, c)>0 implies criteria(a, c)>0.
  2. the same applies to the lower-than sign, lower-than-or-equal, greater-than-or-equal, and equal.
  3. criteria(a, b) should have an opposite sign of criteria(b, a).

Источник

Сортировка массива по количеству символов

Помимо стандартных функций сортировки в PHP есть функции с использованием пользовательских вызовов для сравнения значений и ключей, их можно использовать для упорядочивания массива по количеству символов.

Для подсчета символов рекомендуется использовать mb_strlen() вместо strlen() т.к. в UTF8 strlen() возвращает неправильный результат для русских букв.

Сортировка ключей массива

uksort() – сортирует массив по ключу, используя callback-функцию.

$array = array( 'ЗИЛ' => 1, 'ИЖ' => 0, 'Москвич' => 3, 'УАЗ' => 6, 'Alfa Romeo' => 2, 'Audi' => 5, 'BMW' => 7, 'Cadillac' => 9, ); function sort_key_strlen($a, $b) < return mb_strlen($a) - mb_strlen($b); >uksort($array, 'sort_key_strlen'); print_r($array);
Array ( [ИЖ] => 0 [ЗИЛ] => 1 [УАЗ] => 6 [BMW] => 7 [Audi] => 5 [Москвич] => 3 [Cadillac] => 9 [Alfa Romeo] => 2 )

Поменять направление сортировки можно изменив callback-функцию:

function sort_key_strlen($a, $b) < return mb_strlen($b) - mb_strlen($a); >uksort($array, 'sort_key_strlen'); print_r($array);

Или перевернуть массив функцией array_reverse() :

function sort_key_strlen($a, $b) < return mb_strlen($a) - mb_strlen($b); >uksort($array, 'sort_key_strlen'); $array = array_reverse($array); print_r($array);

Сортировка значений массива

По такому же принципу можно отсортировать по значениям, сохраняя ключи массива используя uasort() .

$array = array( 1 => 'ЗИЛ', 2 => 'ИЖ', 3 => 'Москвич', 4 => 'УАЗ', 5 => 'Alfa Romeo', 6 => 'Audi', 7 => 'BMW', 8 => 'Cadillac', ); function sort_value_strlen($a, $b) < return mb_strlen($a) - mb_strlen($b); >uasort($array, 'sort_value_strlen'); print_r($array);
Array ( [2] => ИЖ [1] => ЗИЛ [4] => УАЗ [7] => BMW [6] => Audi [3] => Москвич [8] => Cadillac [5] => Alfa Romeo )

Источник

PHP СОРТИРОВКА МАССИВА ПО ДЛИНЕ СТРОКИ

PHP позволяет сортировать массивы по различным критериям, включая длину строк. Для сортировки массива по длине строки можно воспользоваться функцией usort().

Функция usort() принимает на вход два параметра: первый — массив для сортировки, второй — функция, которая определяет порядок сортировки. В качестве функции можно передать анонимную функцию, которая будет сравнивать длину строк.

usort($array, function($a, $b) if (strlen($a) == strlen($b)) return 0;
>
return (strlen($a) > strlen($b)) ? 1 : -1;
>);

В данном примере для сравнения строк используется функция strlen(), которая возвращает длину строки. Если длины строк равны, функция возвращает 0. Если длина первой строки больше длины второй строки, функция возвращает 1, иначе -1. В результате сортировки, строки массива будут отсортированы по возрастанию длины.

Основы php. Строковые функции

Алгоритм пузырьковой сортировки на php

Сортировка массива в Javascript

Сортировка массива в PHP с использованием пользовательской функции

Работа со строками в PHP. Обзор топ функций, удаление тегов, экранирование

Изучение PHP для начинающих — Урок #15 — Массивы элементов

Узнать длину строки и массива на PHP (кириллица и латиница)

Быстрая сортировка массива на языке PHP — Алгоритмы и Блок схемы

Сортировка массива объектов

Сортировка массивов в PHP

Источник

Как отсортировать многомерный массив по определенному ключю и по длине строки?

Необходимо отсортировать многомерный массив по определенному ключю ‘login’ и по длине строки (Сперва самое длинное значение логина и так убывание)? подскажите пожалуйста На входе так:

array:2 [ 0 => Proxies\__CG__\App\Domain\User\Entity\User > 1 => Proxies\__CG__\App\Domain\User\Entity\User 2 => Proxies\__CG__\App\Domain\User\Entity\User >
array:2 [ 1 => Proxies\__CG__\App\Domain\User\Entity\User 0 => Proxies\__CG__\App\Domain\User\Entity\User > 2 => Proxies\__CG__\App\Domain\User\Entity\User >
$users = $this->toArray(); usort($users, function ($item1, $item2) < return mb_strlen($item2->getLogin()) mb_strlen($item1->getLogin()); >);

2 ответа 2

Можно usort использовать, например вот так:

usort($array, function ($item1, $item2) < return mb_strlen($item1['login']) mb_strlen($item2['login']); >); 
 array( '+__isInitialized__'=> 'true', '-id'=> '38', '-login'=>'user-modera', '-password' => '123456', '-group' => 'moderator_abm', '-name'=> 'null', '-city'=> 'null' ), '1' => array( '+__isInitialized__'=> 'true', '-id' =>'39', '-login'=> 'user-moderator', '-password' => '123456', '-group' => 'moderator', '-name'=> 'null', '-city'=> 'null' ), '2' => array( '+__isInitialized__'=> 'true', '-id' =>'45', '-login'=> 'user', '-password'=> '123456', '-group'=> 'moderator', '-name'=> 'null', '-city'=> 'null' ) ); foreach ($arrt as $key => $row) < $array_name[$key] = $row['-login']; >array_multisort($array_name, SORT_ASC, $arrt); var_dump($arrt); ?> 

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.7.27.43548

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

Оцените статью