2017-09-26 142 views
0

我不明白這個東西是如何工作的,但我需要創建一個新函數並將其存儲在一個變量中。然後,使用array_filter,刪除所有年齡不足的狗。以下是我創建至今:將函數存儲在變量中

$animals = [ 
    [ 'name' => 'Waffles', 'type' => 'dog', 'age' => 12], 
    [ 'name' => 'Fluffy', 'type' => 'cat', 'age' => 14], 
    [ 'name' => 'Spelunky', 'type' => 'dog', 'age' => 4], 
    [ 'name' => 'Hank'  , 'type' => 'dog', 'age' => 11], 
]; 


$youngDogs = function ($animals, $filter){  
    array_filter(
     $animals, 
     function($animals, $age = 5){ 
      $arr = []; 
      if($animals['type'] == 'dog' && $animals['age'] < $age) 
      { 
       $arr = [ 
        'name' => $animals['name'], 
        'type' => $animals['type'], 
        'age' => $animals['age'], 
       ]; 
      } 
      return $arr; 
     } 
    ); 
}; 


var_dump($youngDogs($animals, 5)); 

我的想法是創建一個新的陣列和存儲符合條件並返回它的狗,但一切是一個爛攤子和函數返回NULL和我不不知道發生了什麼。任何人都可以給我一個提示嗎?

回答

3
  • 您需要use($age)array_filter通行證只有一個參數回調
  • 你需要從你的函數
  • array_filter預計truefalse從回調返回returnarray_filter結果

$youngDogs = function ($animals, $age){  
       return array_filter($animals, 
        function($animal) use($age){ 
         if($animal['type'] == 'dog' && $animal['age'] < $age) { 
          return false; 
         } 
         return true; 
        } 
       ); 
      }; 
+0

謝謝!我從來不會想出如何使用'$ age'! – pidari

0
$animals = [ 
    [ 'name' => 'Waffles', 'type' => 'dog', 'age' => 12], 
    [ 'name' => 'Fluffy', 'type' => 'cat', 'age' => 14], 
    [ 'name' => 'Spelunky', 'type' => 'dog', 'age' => 4], 
    [ 'name' => 'Hank'  , 'type' => 'dog', 'age' => 3], 
]; 


$youngDogs = function ($animals, $age){ 
    return array_filter(
     $animals, 
     function($animals) use ($age){ 
      $arr = []; 
      if($animals['type'] == 'dog' && $animals['age'] < $age) 
      { 
       $arr = [ 
        'name' => $animals['name'], 
        'type' => $animals['type'], 
        'age' => $animals['age'], 
       ]; 
      } 
      return $arr; 
     } 
    ); 
}; 


var_dump($youngDogs($animals, 13)); 
+0

Jeez,就是這樣!它最終奏效了。非常感謝你! – pidari

+0

1.變量'$ age'作爲一個函數參數是無用的,因爲它永遠不會被傳遞,並且在那裏將_always_作爲默認值。 2.變量'$ filter'(OP似乎想用作'$ age')永遠不會被使用。 –

+0

沒問題,pidari。 –

1

你並不需要定義一個新的功能,只是array_filter內創建一個匿名函數是這樣的:

$animals = [ 
    ['name' => 'Waffles', 'type' => 'dog', 'age' => 12], 
    ['name' => 'Fluffy', 'type' => 'cat', 'age' => 14], 
    ['name' => 'Spelunky', 'type' => 'dog', 'age' => 4], 
    ['name' => 'Hank', 'type' => 'dog', 'age' => 11], 
]; 

$animals = array_filter($animals, function ($animal) { 
    return ($animal['type'] != 'dog' || $animal['age'] >= 5); // Keep if not a dog, or is a dog, and is over 5. 
}); 

var_dump($animals); 

eval.in demo

或者,如果你真的需要的功能一個變量,試試這個:

$youngDogs = function ($animal) { 
    return ($animal['type'] != 'dog' || $animal['age'] >= 5); // Keep if not a dog, or is a dog, and is over 5. 
}; 

$animals = array_filter($animals, $youngDogs); 

eval.in demo

相關問題