给定一个已排序的数组和一个指定值,返回指定值在数组中的下标位置,如果不存在,返回把给定值插入到数组之后的下标位置
/** * 分析:两种情况: * 首先,判断数组是顺序还是倒序 * 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; }