php - PHP array_filter 奇怪的行为
问题描述
我正在使用带有多个参数的array_filter,但它没有正确执行过滤器。在这里它应该返回一个只有“arts,crafts,designs”作为元素的数组,它返回一个空数组。它唯一适用的 $askedcat 参数是“arts”。我无法找出问题所在。
我试过不使用 array_filter 而是只循环数组,我遇到了同样的问题。
<?php
class CategoryFilter {
public $categoryAskedFor;
function __construct($askedCat) {
$this->categoryAskedFor = $askedCat;
}
function categoryCallback($projectCategoryString) {
$project_category_array = explode(",", $projectCategoryString);
if(in_array($this->categoryAskedFor, $project_category_array)) return true;
return false;
}
}
$verifiedProjects = ["arts", "arts,crafts,designs", "film", "film,theater"];
$askedCat = "crafts";
$newArr = array_filter($verifiedProjects, array(new CategoryFilter($askedCat), "categoryCallback"));
for ($i = 0; $i < count($newArr); $i++) {
echo $newArr[$i] . "<br>";
}
我希望这里的输出是arts,crafts,design<br>
,但这只是<br>
意味着数组是空的。
解决方案
有很多方法可以实现这一点,但让我在这里向您展示两种方法
方式#1
如果您使用for
循环来检索数组值,则需要有数字键,并且根据您的代码,您需要array_values
函数来管理它
<?php
class CategoryFilter {
public $categoryAskedFor;
function __construct($askedCat) {
$this->categoryAskedFor = $askedCat;
}
function categoryCallback($projectCategoryString) {
$project_category_array = explode(",", $projectCategoryString);
if(in_array($this->categoryAskedFor, $project_category_array)) return true;
return false;
}
}
$verifiedProjects = ["arts", "arts,crafts,designs", "film", "film,theater"];
$askedCat = "crafts";
$newArr = array_filter($verifiedProjects, array(new CategoryFilter($askedCat), "categoryCallback"));
$newArr = array_values($newArr);
for ($i = 0; $i < count($newArr); $i++) {
echo $newArr[$i] . "<br>";
}
方式#2
如果您不想在array_values
这里使用,那么您需要管理foreach
循环而不是for
循环
<?php
class CategoryFilter {
public $categoryAskedFor;
function __construct($askedCat) {
$this->categoryAskedFor = $askedCat;
}
function categoryCallback($projectCategoryString) {
$project_category_array = explode(",", $projectCategoryString);
if(in_array($this->categoryAskedFor, $project_category_array)) return true;
return false;
}
}
$verifiedProjects = ["arts", "arts,crafts,designs", "film", "film,theater"];
$askedCat = "crafts";
$newArr = array_filter($verifiedProjects, array(new CategoryFilter($askedCat), "categoryCallback"));
foreach ($newArr as $value) {
echo $value . "<br>";
}
推荐阅读
- time-complexity - O(n + k log n) 和 O(n log n) 有什么区别
- flutter - StackedIndex 导致失败的断言错误
- javascript - 为什么 removeChild 比 innerHTML = ' ' 快?
- wpf - Dependecy 属性用作源但不用作目标
- java - 为了学习 Java,我需要 Java IDE 吗?
- r - R中按行/秒计算的偏移平均值
- r - 如何正确使用 stack() 函数来提取 R 中 ANCOVA 的边际均值?
- java - 错误 Infating 类 com.google.android.material.card.MaterialCardView
- c++ - 在 C++ 中,如何使用在其他地方的一个文件中定义的常量变量?
- c++ - 无法将 GLuint 转换为 GLuint()