Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组上Excel vlookup的PHP等价物_Php_Lookup - Fatal编程技术网

数组上Excel vlookup的PHP等价物

数组上Excel vlookup的PHP等价物,php,lookup,Php,Lookup,在php中查找内置函数后,我找不到与Excel的vlookup函数类似的函数 我需要一个函数,它接受一个数组和一个查找值,并返回所需的信息。例如: <?php $baseCalculationPrice = [ 0 => 50, //for values <=500 but >0 500 => 18, //for values <=3000 but >500 3000 => 15, //for

在php中查找内置函数后,我找不到与
Excel
vlookup
函数类似的函数

我需要一个函数,它接受一个数组和一个查找值,并返回所需的信息。例如:

<?php
$baseCalculationPrice = [
    0 => 50,        //for values <=500 but >0
    500 => 18,      //for values <=3000 but >500
    3000 => 15,     //for values <=5000 but >3000
    5000 => 14,     //for values >5000 
];

//Examples
    $numPages = 499;
    echo vlookup($numPages,$baseCalculationPrice); //should output 50
    $numPages = 500;
    echo vlookup($numPages,$baseCalculationPrice); //should output 50
    $numPages = 501;
    echo vlookup($numPages,$baseCalculationPrice); //should output 18
    $numPages = 3000;
    echo vlookup($numPages,$baseCalculationPrice); //should output 18
    $numPages = 3001;
    echo vlookup($numPages,$baseCalculationPrice); //should output 15
    $numPages = 5000;
    echo vlookup($numPages,$baseCalculationPrice); //should output 15
    $numPages = 5001;
    echo vlookup($numPages,$baseCalculationPrice); //should output 14

function vlookup($value,$array){
    //magic code

    return ....;
}
?>


我甚至无法理解这样一个函数背后的逻辑,因此任何帮助都将非常有用-谢谢。

如果您想查询多维关联数组,请尝试以下方法:

function vlookup($lookupValue,$array){

    $result;

    //test each set against the $lookupValue variable,
    //and set/reset the $result value

    foreach($array as $key => $value)
    {
        if($lookupValue > $key)
        {
        $result = $value;
        }
    }

    return $result;

}
 function vlookup($lookup_vakue, $lookup_array, $lookup_column, $result_column)
    {
        foreach ($lookup_array as $item) {
                if ($item[$lookup_column] == $lookup_vakue) {
                    return $item[$result_column];
                }
        }
        return false;
    }
样本数据

$data = 
[ 
   ['id'=>1,'price'=>100],
   ['id'=>2,'price'=>200],
   ['id'=>3,'price'=>300]
];
查询选项

$result = vlookup('2',$data, 'id','price');
结果:

200
$getbase=函数($amount)使用($baseCalculationPrice)
{
返回(结束)(数组\过滤器(
$baseCalculationPrice,函数($key)使用($amount)
{
返回$key<$amount;
},
数组\过滤器\使用\键
)));
};
金额150结果50 金额1500结果18
数量25000结果14

在我的研究中,我遇到了这个。然而,由于它需要为介于两者之间的值工作,我找不到它的用途——也许其他人可能会这样做——在PHP中没有这样的功能。最接近的是
array\u searhc()
,它只进行精确匹配。您必须对数组进行排序,然后循环查找最近的键。@MarcB对不起,您的意思是
array\u search()
?您说过“我需要一个函数”对吗因为这是我能想到的最好的了,在PHP中没有像这样的本地语言
200
$getbase= function($amount) use ($baseCalculationPrice)
    {
        return (end(array_filter(
        $baseCalculationPrice,function ($key) use ($amount) 
            {
              return $key < $amount;
            },
        ARRAY_FILTER_USE_KEY
        )));
     };