2014-03-19 55 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

這是對的,所以你的回答並不回答這個問題! –