Эй, у меня есть ассоциативный массив, который имеет ключи как String и значения как Int.
Таким образом, из этого ассоциативного массива мне нужно получить ключ, который имеет наибольшее значение, и если несколько ключей имеют одинаковое значение, то мне нужен ключ с наибольшей длиной.
Так какой же самый эффективный способ сделать это?
пример
array = (
'abc' => 10,
'def' => 8,
'fff' => 3,
'abcr' => 10,
'adsfefs' => 10
)
Так что для этого я должен получить вывод как adsfefs
Ты можешь использовать 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);
Помните, что если есть две или более строки одинаковой длины, он вернет последнюю.
использование 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";
arsort(array)
отменить сортировку их по значениюforeach результирующий массив, пока значение не меняется. Хранить каждый ключ в другом массиве в формате
[key] => strlen(key);
Так 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";
?>