数组上Excel vlookup的PHP等价物
在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
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
)));
};