2014-03-19 57 views
-2

我有下面的数组和$num,我试图检查每个元素的$num是否等于或在fromto的范围内。如果条件为true,则返回该数组的对应或键,并停止进一步比较。我能够做到这一点使用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; 
     } 

    } 
+1

你必须使用'array_filter' – hindmost

+1

你目前的代码是什么? –

+0

@AlmaDo检查当前代码 – DepH

回答

2
function fn($numbers, $num) 
{ 
    foreach($numbers as $key=>$val) 
    { 
     if($num >= $val["from"] && $num <= $val["to"]) 
     { 
      return $key; 
     } 
    } 

    return null; 
} 
+0

这和Andrey Mischenko的答案有什么不同? –

+0

我正在写我自己的答案。我没有看到他发布的内容 – Hassan

+0

我注意到你也包含了范围的每一端,所以你的确是正确的。 –

2
function compare($array, $num) { 
    foreach ($array as $key => $value) { 
     if ($num >= $value['from'] && $num <= $value['to']) // any condition here 
      return $key; 
    } 
    return null; 
} 
0

下面是检查是否$num是每个码$array阵列:

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

但是'array_filter'“迭代数组中的_each_值”http:// www。 php.net/manual/en/function.array-filter.php,而问题是关于一旦找到匹配就停止。 –

+0

@Tom Fenech没错。所以如果他想要这样的效率,OP必须使用循环(就像在之前的答案中一样)。 – hindmost

+0

这是对的,所以你的回答并不回答这个问题! –