找到下一个最高的数组键

时间:2014-04-15 20:30:52

标签: php arrays

是否有一个班轮用于查找等于或大于给定索引的整数键?为了清楚起见,这是我正在使用的数组的一个例子。

array( 4294967295 => 'LONGTEXT'
     , 16777215   => 'MEDIUMTEXT'
     , 65535      => 'TEXT'
     , 255        => 'TINYTEXT' );

正如你们中的一些人可能认识到的那样,这些是MySQL列定义类型。假设我给了一个整数500,我怎样才能快速/紧凑地找到映射到65535的{​​{1}}的下一个键?

目前我使用'TEXT'迭代数组(因此首先是最高值)并跟踪最后一个键。但是,由于我正在处理的数组和数据类型的数量,该函数变得臃肿。

1 个答案:

答案 0 :(得分:2)

这是紧凑的,应该可以工作:

$sizes = array_filter(array_keys($array), function($element) use ($size) { return $element >= $size; });
$array[array_pop($sizes)];

如果$array中没有足够大的类型,则会发出未定义的索引错误。我真的不会认为它是最优的 - 最好的解决方案很少是最短的。

考虑使用类似的东西,它更强大:

function getType(array $types, $desiredSize) { // $types should be sorted by key asc
    foreach($array as $length => $type) {
        if($length >= $desiredSize) {
            return $type;
        }
    }

    return null; // no type large enough
}

$types = array(
        4294967295 => 'LONGTEXT',
        16777215 => 'MEDIUMTEXT',
        65535 => 'TEXT',
        255 => 'TINYTEXT');
ksort($types); // or hardcode it in asc order

echo getType($types, 500); // TEXT