Php 通过比较值从数组返回键
我有3个数组,一个是低值权重,另一个是高值权重,第三个:权重“括号”的实际值:Php 通过比较值从数组返回键,php,arrays,comparison,sorting,Php,Arrays,Comparison,Sorting,我有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] =>
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中找到对应的键,其中我的值(比如说5.30)大于数组1中的值,但小于数组2中的对应值(大于5但小于20)。此示例的结果将从数组3生成数组键[2],值为100
我可以循环遍历每个数组并找到键,但我希望有一种更快的方法,通过某种方式合并数组:
[2] =>
[0] => 5.00
[1] => 20.00
[2] => 100
…然后查看我的值是否介于[0]和[1]之间,如果介于[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
)
)
如果您的输入数据不是以这样一种不幸的方式构造的,那就容易多了 无论如何,如果您想快速执行此操作,那么合适的解决方案可能是手动循环:
// possibly add some error checking
foreach($lows as $i => $low) {
if ($value >= $low && isset($highs[$i]) && $value <= $highs[$i]) {
return $values[$i];
}
}
然后:
foreach($bands as $band) {
if($value >= $band[0] && $band[1] && $value <= $band[1]) {
return $band[2];
}
}
foreach($bands作为$band){
如果($value>=$band[0]&&&$band[1]&&&$value,那么对于这个示例来说,理想的结构是什么?@Ingental:类似于您最后想要做的:)我想这改变了我的问题,使用新数组,返回值的最快方法是什么?@Ingental:与第一种方法基本相同。我更新了答案。回答很好Jon,谢谢。我已将其封装在一个函数中并成功应用。谢谢。
foreach($bands as $band) {
if($value >= $band[0] && $band[1] && $value <= $band[1]) {
return $band[2];
}
}