一些开发过程中解决方案

快速获取所在的梯度位置

问题: 客户要求充值送礼品, 金额可自定义

数据库存储为

id money gift
4 100 杯子
5 200 水壶
6 50 抽纸
9 300 电风扇  

QA:假设充值金额为250,我们就要得出id为5的数据

$v = 250;//充值的钱
//数据库取出所有数据
$arr = array(4=>100, 5=>200, 6=>50, 9=>300);
array_push($arr, $v);
$rs = get_element($v, $arr, $who='next');

/**
 * 查找一维数组指定元素的值的前一个或者后一个元素 默认前一个
 * @param  [int] $v [指定元素的值]
 * @param  [arr] $arr [数组]
 * @param  string $who [prev/next]
 * @return [type]      [description]
 */
function get_element($v, $arr, $who='prev')
{
	// 前一个后一个是排序的问题
    $who != 'prev' ? asort($arr) : arsort($arr);
    
    $key = array_search($v, $arr);
    //查找键为$key元素的位置
    $offset = array_search($key, array_keys($arr));
    
    if(FALSE == $offset || NULL == $offset) return false;

    $iterator = new ArrayIterator($arr);
    $iterator->seek($offset);
    $iterator->next();
    return $iterator->key();

    //返回数组当前指针指向元素的键值数组
    // return array($iterator->key(), $iterator->current());
} 

当然还有其他方法,但是好像这个是最快速的~




导航