Помогите решить проблему с PHP массивом

189
15 февраля 2019, 03:30

Вот код:

$arr = ["Ceylon", "Fish", "Apple", "MongoDB", "123456789990"]; 

usort($arr,function($a, $b){
    return strlen($b)||strlen($a);
});
$arr2 = array_slice($arr, 0, 2);
echo join(", ",$arr2);

Если в методе array_slice($arr, 0, 2);указать значения 2 выведет 123456789990, MongoDB а если мы укажем array_slice($arr, 0, 5); то выведет 123456789990, MongoDB, Fish, Apple, Ceylon все 5 значения массива, мне нужно чтоб выводилось только самые длинные значения массива, или на оборот саммые короткие, помогите решить проблему, я новичок в PHP.

Answer 1

...мне нужно чтоб выводилось только самые длинные значения массива, или на оборот саммые короткие...

Та не понятно, какое слово считается длинным, а какое коротким, 'test' - это длинное или короткое, крч дам примерчики, выберете сами:

Например есть массив:

$array = ["Ceylon", "Fish", "Apple", "MongoDB", "Seven77"];

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

usort($array, function ($a, $b) {
    return mb_strlen($b) - mb_strlen($a);
});
var_dump($array);

Результат:

array(5) {
  [0] => string(7) "MongoDB"
  [1] => string(7) "Seven77"
  [2] => string(6) "Ceylon"
  [3] => string(5) "Apple"
  [4] => string(4) "Fish"
}

2) Только те значение, длина которых больше или равно $length = 5:

$result = [];
$length = 5;
foreach ($array as $key => $value) {
    if ($length <= mb_strlen($value)) {
        $result[] = $value;
    }
}
var_dump($result);

Результат:

array(4) {
  [0] => string(6) "Ceylon"
  [1] => string(5) "Apple"
  [2] => string(7) "MongoDB"
  [3] => string(7) "Seven77"
}

3) Найти максимальную длину, и выбрать элементы с этой длиной:

$result = [];
$length = 0;
array_map(function($v) use (&$length) {
    if ($length < mb_strlen($v)) {
        $length = mb_strlen($v);
    }
}, $array);
foreach ($array as $key => $value) {
    if ($length == mb_strlen($value)) {
        $result[] = $value;
    }
}
var_dump($result);

Результат:

array(2) {
  [0] => string(7) "MongoDB"
  [1] => string(7) "Seven77"
}
Answer 2
usort($arr,function($a, $b){
    return (strlen($a)==strlen($b)? 0 : (strlen($a)<strlen($b)? 1: -1));
});

После выводите нужное кол-во элементов с начала массива =) самые длинные в начале, короткие в конце.

READ ALSO
Разница функции Laravel

Разница функции Laravel

В чем разница между $request->get('name') и $request['name']?

186
Не получается редактировать запись в MySQL php

Не получается редактировать запись в MySQL php

Сколько времени копался, так и не смог разобратьсяНе редактируются данные в базе MySQL

175
Забрать текст из последних скобок в строке с помощью регулярных выражений

Забрать текст из последних скобок в строке с помощью регулярных выражений

Есть строка: Сочи (Адлер) (Россия), из которой мне нужно изъять текст, который находится в последих скобкахТо есть, текст Россия

211
Проблема с вывод подменю в рубриках WP

Проблема с вывод подменю в рубриках WP

Есть вот такой пример меню

159