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

  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";
    ?>
    

您可以使用 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";