получить элемент max в буквенно-цифровом массиве php - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу, чтобы приведенный ниже буквенно-цифровой массив возвращал элемент max в зависимости от значения в массиве, которое равно h5-19: я пытался использовать max($array), но это возвращает h5-9.

Array
(
    [3] => h5-1
    [4] => h5-2
    [2] => h5-3
    [1] => h5-4
    [0] => h5-6
    [5] => h5-7
    [6] => h5-8
    [7] => h5-9
    [8] => h5-10
    [9] => h5-11
    [10] => h5-13
    [11] => h5-15
    [12] => h5-19
)

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018
<?php


$set = array();

$data = array(
            '3' => 'h5-1',
            '4' => 'h5-2',
            '2' => 'h5-3',
            '1' => 'h5-4',
            '0' => 'h5-6',
            '5' => 'h5-7',
            '6' => 'h5-8',
            '7' => 'h5-9',
            '8' => 'h5-10',
            '9' => 'h5-11',
            '10' => 'h5-13',
            '11' => 'h5-15',
            '12' => 'h5-19',
            '789' => 'h1-8',
            '123' => 'p-78',
            '3000' => 'p-8',

        );

foreach($data as $each_element){
    $each_val = explode("-",$each_element);
    if(!isset($set[$each_val[0]])){
        $set[$each_val[0]] = intval($each_val[1]); 
    }
    $set[$each_val[0]] = max(intval($each_val[1]),$set[$each_val[0]]);
}

print_r($set);

Вывод:

Array
(
    [h5] => 19
    [h1] => 8
    [p] => 78
)

Алгоритм:

  • Создать набор тегов, который будетбыть ассоциативным массивом, где key будет именем тега, а value будет максимальным значением этого тега, присутствующего в вашем массиве.

  • Если ключ уже установлен,получить максимальное значение между значением в ключе (теге) и новым значением, которое также принадлежит тому же тегу.Таким образом, у вас есть максимум для каждого тега.

0 голосов
/ 07 декабря 2018

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

$originArr = [
    "h5-01",
    "h6-1",
    "h5-2",
    "h5-3",
    "h5-7",
    "h5-9",
    "h5-11",
    "h5-15",
    "h5-19" 
];
// Copy array to keep order of origin array
$arr = $originArr;
usort($arr, function($a, $b){
    return explode('-', $b)[1] - explode('-', $a)[1];
});
echo $arr[0];
// h5-19

Проверьте результат в demo

0 голосов
/ 07 декабря 2018

При сортировке данных используются rsort() и SORT_NATURAL, а затем выводится первый элемент ...

$data = Array
(
    "3" => "h5-1",
    "4" => "h5-2",
    "2" => "h5-3",
    "1" => "h5-4",
    "11" => "h5-15",
    "12" => "h5-19"
    );

rsort($data, SORT_NATURAL);
echo $data[0];

, который дает ...

h5-19
...