Php 通过比较值从数组返回键

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] =>

我有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];
    }
}