我有3个阵列,一个具有较低的权重,另一个具有较高的权重,第三个:该权重“括号”的实际值:
Array 1
(
[0] => 0.00
[1] => 2.00
[2] => 5.00
[3] => 20.00
[4] => 50.00
[5] => 100.00
)
Array 2
(
[0] => 1.90
[1] => 4.90
[2] => 20.00
[3] => 50.00
[4] => 100.00
)
Array 3
(
[0] => 30
[1] => 50
[2] => 100
[3] => 200
[4] => 500
[5] => 1000
)
我需要从数组3中找到相应的KEY,其中我的值(比如5.30)大于数组1中的值但小于数组2中的相应值(大于5但小于20)。此示例的结果将从数组3生成[2]的数组键,值为100.
我可以循环遍历每个数组并找到键,但我希望通过某种方式合并数组,有更快的方法来做到这一点:
[2] =>
[0] => 5.00
[1] => 20.00
[2] => 100
...然后查看我的值是否在[0]和[1]之间,如果是,则返回[2] 基本上[2] [0]是'来自'权重,[2] [1]是'到'权重,而''括号'的值是[2] [2]。
使用示例代码合并数组:
Array
(
[0] => Array
(
[0] => 0.00
[1] => 1.90
[2] => 30
)
[1] => Array
(
[0] => 2.00
[1] => 4.90
[2] => 50
)
[2] => Array
(
[0] => 5.00
[1] => 20.00
[2] => 100
)
[3] => Array
(
[0] => 20.00
[1] => 50.00
[2] => 200
)
[4] => Array
(
[0] => 50.00
[1] => 100.00
[2] => 500
)
[5] => Array
(
[0] => 100.00
[1] =>
[2] => 100
)
)
答案 0 :(得分:1)
如果你的输入数据没有以这种不幸的方式构建,那将会容易得多。
无论如何,如果您想要快速,那么相应的解决方案可能是手动循环:
// possibly add some error checking
foreach($lows as $i => $low) {
if ($value >= $low && isset($highs[$i]) && $value <= $highs[$i]) {
return $values[$i];
}
}
要执行您要求的操作(合并数组),您可以使用array_map
:
$merged = array_map(
function($low, $high = null, $value) {
return func_get_args();
},
$lows, $highs, $values);
然后:
foreach($bands as $band) {
if($value >= $band[0] && $band[1] && $value <= $band[1]) {
return $band[2];
}
}