我不明白这件事是如何运作的,但我需要创建一个新函数并将其存储在变量中。然后,通过使用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并且我不知道发生了什么。谁能给我一个提示?
答案 0 :(得分:3)
use($age)
,因为array_filter
只传递回调的一个参数return
array_filter
来自您的功能array_filter
期望从回调中返回true
或false
$youngDogs = function ($animals, $age){
return array_filter($animals,
function($animal) use($age){
if($animal['type'] == 'dog' && $animal['age'] < $age) {
return false;
}
return true;
}
);
};
答案 1 :(得分: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);
或者,如果你真的需要函数作为变量,试试这个:
$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);
答案 2 :(得分: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));