给定一个已排序的数组和一个指定值,返回指定值在数组中的下标位置,如果不存在,返回把给定值插入到数组之后的下标位置
/**
* 分析:两种情况:
* 首先,判断数组是顺序还是倒序
* 1. 不在数组中
* 1.1. 大于最大值
* 1.2. 小于最大值
* 1.3. 介于两者之间
* 2. 在数组中,返回下标
*/
function getKeyFromArray($array, $select)
{
// 非数组和空数组过滤
if (!is_array($array) || count($array) < 1) {
return -1;
}
// 判断数组是顺序还是倒序
$length = count($array);
$order = $array[$length - 1] >= $array[0] ? 'asc' : 'desc';
$key = array_search($select, $array);
// 找不到返回false
if (false === $key) {
$max = max($array);
$min = min($array);
if ($select > $max) {
return $order == 'asc' ? $length : 0;
} elseif ($select < $min) {
return $order == 'asc' ? 0 : $length;
} else {
foreach ($array as $key => $val) {
if ($select > $val) {
return $order == 'asc' ? $key + 1 : $key;
}
}
}
} else {
return $key;
}
return -1;
}