嘿,我有一个关联数组,其中键为字符串,值为整数。
所以我需要从这个关联数组中获取具有最高值的键,如果有多个键具有相同的值,则需要选择长度最长的键。
那么,最有效的方法是什么呢?
示例:
array = (
'abc' => 10,
'def' => 8,
'fff' => 3,
'abcr' => 10,
'adsfefs' => 10
)
所以我应该得到输出为adsfefs。
嘿,我有一个关联数组,其中键为字符串,值为整数。
所以我需要从这个关联数组中获取具有最高值的键,如果有多个键具有相同的值,则需要选择长度最长的键。
那么,最有效的方法是什么呢?
示例:
array = (
'abc' => 10,
'def' => 8,
'fff' => 3,
'abcr' => 10,
'adsfefs' => 10
)
您可以使用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);
$longestKey = max(array_keys($array, max($array)));
。 - Dan Abreyarsort(array)
按值进行反向排序。
对于结果数组,只要值不变,就循环存储每个键在其他数组中的格式。
[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 "具有最高价值的最长键是:" . array_keys($keys)[0] . "\n";
?>
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";