2014-09-28 24 views
2

我原來有這個大陣,我從我的數據庫中的一個縮短的版本得到:PHP的警告:array_filter()預計參數2是一個有效的回調,第二個數組成員是不是一個有效的方法

$arreglo =Array 
(
    "0" => Array 
     (
      "concurso" => 2600, 
      "R1" => 1 
     ), 

    "1" => Array 
     (
      "concurso" => 2602, 
      "R1" => 1 
     ), 

    "2" => Array 
     (
      "concurso" => 2603, 
      "R1" => 1 
     ), 

    "3" => Array 
     (
      "concurso" => 2648, 
      "R1" => 1 
     ), 

    "4" => Array 
     (
      "concurso" => 2653, 
      "R1" => 1 
     ), 

    "5" => Array 
     (
      "concurso" => 2655, 
      "R1" => 1 
     ), 

    "6" => Array 
     (
      "concurso" => 2698, 
      "R1" => 1 
     ), 

    "7" => Array 
     (
      "concurso" => 2722, 
      "R1" => 1 
     ), 

    "8" => Array 
     (
      "concurso" => 2741, 
      "R1" => 1 
     ), 

    "9" => Array 
     (
      "concurso" => 2743, 
      "R1" => 1 
     ), 

    "10" => Array 
     (
      "concurso" => 2744, 
      "R1" => 1 
     ), 

    "11" => Array 
     (
      "concurso" => 2745, 
      "R1" => 1 
     ), 

    "12" => Array 
     (
      "concurso" => 2763, 
      "R1" => 1 
     ), 

    "13" => Array 
     (
      "concurso" => 2778, 
      "R1" => 1 
     ), 

    "14" => Array 
     (
      "concurso" => 2780, 
      "R1" => 1 
     ), 

    "15" => Array 
     (
      "concurso" => 2782, 
      "R1" => 1 
     ), 

    "16" => Array 
     (
      "concurso" => 2607, 
      "R1" => 2 
     ), 

    "17" => Array 
     (
      "concurso" => 2609, 
      "R1" => 2 
     ) 
); 

它繼續下去,直到「R1」的元素值是56.

所以我想分開R1的每一組值,例如,當R1等於1時,我將每個值「concurso」存儲在一個名爲array 「$ concursos」通過使用以下功能:

function category($var) 
{ 
    return (is_array($var) && $var['R1'] == 1); 
} 
$current=array_filter($arreglo,"category"); 

一切正常,到現在爲止,因爲當R1 = 1,我只得到該concursos的列表時,R1 = 1,如下所示:

Array 
(
    [0] => 2600 
    [1] => 2602 
    [2] => 2603 
    [3] => 2648 
    [4] => 2653 
    [5] => 2655 
    [6] => 2698 
    [7] => 2722 
    [8] => 2741 
    [9] => 2743 
    [10] => 2744 
    [11] => 2745 
    [12] => 2763 
    [13] => 2778 
    [14] => 2780 
    [15] => 2782 
) 

的問題是,如果我想再次使這個下面的編號,其中R 1 = 2,3,... 56的內部for循環中,然後,而不是指定== 1,我會設置== $ currentR1,在像這樣的功能:

function category($var) 
    { 
     return (is_array($var) && $var['R1'] == $currentR1); 
    } 
    $current=array_filter($arreglo,"category"); 

現在問題是,如果我試圖把一個參數,該函數的調用失敗,我怎麼能在這裏指定一個參數?

我曾嘗試,例如,

$current=array_filter($repeticiones,array('category',$l)); 

和失敗警告我

警告:array_filter()預計參數2是一個有效的回調,第二陣列構件是不是一個有效的方法在在線X上的myScript.php

那麼我怎樣才能指定參數?

+0

'array('category',$ l)'---你想表達什麼? 有了這個? – zerkms 2014-09-28 04:51:02

回答

4

您可以使用匿名函數是這樣的:

$r = 2; 
$current = array_filter($arreglo, function($var) use ($r){ 
               //^import variable to the closure scope 
    return (is_array($var) && $var['R1'] == $r); 
}); 
+0

可愛!這沒有竅門:-) – Pathros 2014-09-28 21:38:22

+0

@pathros肯定人很高興這有助於 – Ghost 2014-09-28 22:04:34

1

你可以寫一個函數,返回另一個功能是可以傳遞給array_filter()

function categoryFunction($someVar) 
{ 
    return function($var) use ($someVar) { 
     return (is_array($var) && $var['R1'] == $someVar); 
    }; 
} 

$current=array_filter($arreglo, categoryFunction($l)); 
+0

@zerkms謝謝。我有時會混淆JavaScript和PHP :) – 2014-09-28 05:00:22

+0

老實說,這些都是我犯的錯誤:錯過了一個分號,最初留下了嵌套的函數名:-) – zerkms 2014-09-28 05:02:30

1

可以使用匿名函數,像這個:

for($r = 1; $r < 56; $r++){ 
    $current=array_filter($arreglo,function ($var) use ($r) { return ($var['R1'] == $r); }); 
    ...do something with $current... 
} 
相關問題