是否有一个班轮用于查找等于或大于给定索引的整数键?为了清楚起见,这是我正在使用的数组的一个例子。
array( 4294967295 => 'LONGTEXT'
, 16777215 => 'MEDIUMTEXT'
, 65535 => 'TEXT'
, 255 => 'TINYTEXT' );
正如你们中的一些人可能认识到的那样,这些是MySQL
列定义类型。假设我给了一个整数500
,我怎样才能快速/紧凑地找到映射到65535
的{{1}}的下一个键?
目前我使用'TEXT'
迭代数组(因此首先是最高值)并跟踪最后一个键。但是,由于我正在处理的数组和数据类型的数量,该函数变得臃肿。
答案 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