【问题标题】:compare an integer with multidimensional array将整数与多维数组进行比较
【发布时间】:2014-03-19 13:00:50
【问题描述】:

我有以下数组和一个数字$num,我正在尝试检查每个元素的$num 是否等于或在fromto 的范围内。如果条件为真,则应返回该数组的对应或键,并停止进一步比较。我可以使用array_walk 实现这一点,但无法停止进一步比较

Array
(
    [_1395216158966_966] => Array
        (
            [from] => 1
            [to] => 3
            [rate] => 10
        )

    [_1395216219094_94] => Array
        (
            [from] => 3
            [to] => 6
            [rate] => 15
        )

    [_1395216219662_662] => Array
        (
            [from] => 6
            [to] => 9
            [rate] => 20
        )

)

当前代码

array_walk($data, array($this, 'CalculateWeightCharge'), $weight)

public function CalculateWeightCharge($data, $needle, $num)
    {

        if($num >= $data['from'] && $num <= $data['to']){
            return true;
        }

    }

【问题讨论】:

  • 你必须使用array_filter
  • 你当前的代码是什么?
  • @AlmaDo 检查当前代码
  • @hindmost 你的建议不错,但是我怎么传号???

标签: php arrays multidimensional-array callback compare


【解决方案1】:
function fn($numbers, $num)
{
    foreach($numbers as $key=>$val)
    {
         if($num >= $val["from"] && $num <= $val["to"])
         {
            return $key;
         }
    }

    return null;
}

【讨论】:

  • 这与安德烈·米申科的回答有何不同?
  • 我正在写我自己的答案。我没有看到他发布的内容
  • 我注意到你也包括了范围的每一端,所以你的实际上是正确的。
  • 是的,它应该是 >= 和
【解决方案2】:
function compare($array, $num) {
    foreach ($array as $key => $value) {
        if ($num >= $value['from'] && $num <= $value['to']) // any condition here
            return $key;
    }
    return null;
}

【讨论】:

    【解决方案3】:

    下面是检查$num是否在$array数组的每个范围内的代码:

    $result = array_filter($array, function ($v) use($num) {
        return $num >= $v['from'] && $num <= $v['to'];
    })
    if (count($result) == count($array)) echo 'TRUE';
    

    【讨论】:

    • 但是array_filter“迭代数组中的每个值”php.net/manual/en/function.array-filter.php,而问题是一旦找到匹配项就停止。
    • @Tom Fenech 没错。因此,如果他想要这样的效率,OP 必须使用循环(如前面的答案)。
    • 没错,所以你的回答没有回答问题!
    猜你喜欢
    • 2013-09-25
    • 2018-06-28
    • 2015-08-12
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多