我有一个整数数组:
$intArr = [2, 4, 8, 16];
假设$ inputInt为8,我需要来自该数组的最大整数匹配,当然应该返回8。
以下功能需要修改:
function getBiggestMatch($intputInt) {
$intArr = [2, 4, 8, 16];
foreach($intArr as $key => $value) {
if($key < $intputInt) {
$biggestMatch = $value;
}
}
return $biggestMatch;
}
$biggestMatch = getBiggestMatch(8); // should return 8, but returns 2 now
此函数将返回2,因为这是第一次$ key&lt; $ intInput。所需的结果必须是来自$ intArr。
的8答案 0 :(得分:0)
比较$value
,而不是$key
。这将返回8.
<?php
function getBiggestMatch($intputInt) {
$intArr = [2, 4, 8, 16];
foreach($intArr as $key => $value) {
if($value <= $intputInt) {
$biggestMatch = $value;
}
}
return $biggestMatch;
}
echo getBiggestMatch(8); // should return 8, but returns 2 now
?>
答案 1 :(得分:0)
您需要进行双重检查,因为如果您的数组没有订单,则会返回最后一个次要值:
function getBiggestMatch($intputInt) {
$intArr = [4, 8, 2, 16];
$maxInt = false;
foreach($intArr as $key => $value) {
if($intputInt >= $value && $maxInt < $value) $maxInt = $value;
}
return $maxInt;
}
echo getBiggestMatch(12);
修改强>
按照@ Rizier123的建议,该功能需要找到最大最接近的值(我原来的问题我不太了解),这可能是一个可能的解决方案:
function getBiggestMatch($intputInt) {
$intArr = [4, 8, 2, 16];
$maxInt = false;
$diference = 0;
foreach($intArr as $key => $value) {
if( $diference == 0 || ($diference > 0 && abs($intputInt - $value) < $diference) ) {
$maxInt = $value;
$diference = abs($intputInt - $value);
}
}
return $maxInt;
}
echo getBiggestMatch(15);