Php ассоциативный массив сортировки и получения ключа с наибольшей длиной

Эй, у меня есть ассоциативный массив, который имеет ключи как String и значения как Int.
Таким образом, из этого ассоциативного массива мне нужно получить ключ, который имеет наибольшее значение, и если несколько ключей имеют одинаковое значение, то мне нужен ключ с наибольшей длиной.

Так какой же самый эффективный способ сделать это?

пример

array = (
'abc'     => 10,
'def'     => 8,
'fff'     => 3,
'abcr'    => 10,
'adsfefs' => 10
)

Так что для этого я должен получить вывод как adsfefs

2

Решение

Ты можешь использовать array_keys и передать второй параметр, чтобы отфильтровать возвращаемые ключи, чтобы включить только max из них. Вы можете найти самый длинный ключ, используя array_reduce и функция, которая проверяет длину строк и выбрасывает самую короткую, например:

$array = array(
'abc'     => 10,
'def'     => 8,
'fff'     => 3,
'abcr'    => 10,
'adsfefs' => 10
);

$keys = array_keys($array, max($array));
$longestKey = array_reduce($keys, function ($a, $b) { return strlen($a) > strlen($b) ? $a : $b; });

var_dump($longestKey);

Помните, что если есть две или более строки одинаковой длины, он вернет последнюю.

4

Другие решения

использование arsort($data); выполнить первоначальную сортировку значений данных, а затем использовать array_values определить наибольшее значение. С наибольшим значением найдите, какие ключи имеют это значение, а затем переберите и найдите самое длинное значение ключа.

$data = array('bob' => 3, 'rob' => 4, 'nigel' => 6,'john' => 6, 'tony' => 6 );

// Sort array in descending value order
arsort($data);

// Get the first value (will be the largest value)
$maxValue = array_values($data)[0];

// Get an array of all keys with this value
$keys = array_keys($data, $maxValue);

// Find longest key
$maxKey = '';
foreach ($keys as $key) {
if (strlen($key) > strlen($maxKey)) {
$maxKey = $key;
}
}

// Output
print "Largest Value = $maxValue\n";
print "Largest Key with value of $maxValue is $maxKey\n";
0

  1. использование arsort(array) отменить сортировку их по значению
  2. foreach результирующий массив, пока значение не меняется. Хранить каждый ключ в другом массиве в формате

    [key] => strlen(key);
    
  3. Так arsort(other_array) и возьмите первый элемент. Это должен быть ключ с самыми длинными ключами (но имейте в виду, что если имеется много ключей одинаковой длины, вы должны добавить некоторые другие условия для выбора между ними).

    <?php
    
    $sid = array(
    'abc'     => 10,
    'def'     => 8,
    'fff'     => 3,
    'abcr'    => 10,
    'adsfefs' => 10
    );
    
    arsort($sid);
    
    $prev_val = null;
    $keys = Array();
    
    foreach ($sid as $k=>$v) {
    if ($k < $prev_val) break;
    $keys[$k] = strlen($k);
    $prev_val = $k;
    }arsort($keys);
    
    echo "Longest key with highest value is: " . array_keys($keys)[0] . "\n";
    ?>
    
0
По вопросам рекламы [email protected]