Php 关联数组排序并获取最大长度的键
Php associative array sort and get key with highest length
嘿,我有一个关联数组,它的键是 String,值是 Int。
因此,我需要从那个关联数组中获取具有最高值的键,如果多个键具有相同的值,那么我需要具有最高长度的键。
那么最有效的方法是什么?
例子
array = (
'abc' => 10,
'def' => 8,
'fff' => 3,
'abcr' => 10,
'adsfefs' => 10
)
所以为此我应该将输出作为 adsfefs
- 使用
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";
?>
您可以使用 array_keys
并传递第二个参数来过滤 returned 键以仅包含 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);
请注意,如果有两个或多个长度相同的字符串,它将 return 最后一个。
使用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";
嘿,我有一个关联数组,它的键是 String,值是 Int。 因此,我需要从那个关联数组中获取具有最高值的键,如果多个键具有相同的值,那么我需要具有最高长度的键。
那么最有效的方法是什么?
例子
array = (
'abc' => 10,
'def' => 8,
'fff' => 3,
'abcr' => 10,
'adsfefs' => 10
)
所以为此我应该将输出作为 adsfefs
- 使用
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"; ?>
您可以使用 array_keys
并传递第二个参数来过滤 returned 键以仅包含 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);
请注意,如果有两个或多个长度相同的字符串,它将 return 最后一个。
使用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";