php - 如何实现array_filter() 更清晰
问题描述
我在 PHP 中需要一点帮助,因为我正在尝试使用array_filter()
来防止多行并使其简单明了,但是即使我正在阅读此文档,我也很难做到这一点:Array_Filter所以我需要一种正确的实现方式,因为有时会getCategoryTree()
出现空值或空值,我试图不显示它,我想创建其他函数来仅显示没有类别的特定事物,但我觉得它效率不高:
我正在尝试从网址 www.foobar.com/checkout/payments 填充,这是原始代码:
$page['eData'] = [
'codeMoneyFormatter' => $this->moneyFormatter->getcodeMoneyFormatter(),
'checkout' => [
'actionField' => ['step' => 3, 'option' => 'Review Order'],
// ---------------- THIS ONE MUST REFACTOR -------
'products' => $this->getCartFromOrder($order),
],
];
// --------------------- REFACTOR ------------------
$itemData['category'] = $category ? $this->getCategoryTree($category->getId()) : '';
// -------------------------------------------------
这个函数是它显示类别的地方,但我不喜欢它,因为在某些页面中它是空/空的,这是不正确的,所以我想使用array_filter()
// --------------------- ARRAY_FILTER ------------------
$itemData['category'] = array_filter($category ? $this->getCategoryTree($category->getId()) : '');
// -------------------------------------------------
我创建的只显示特定事物的功能,它是正确的,因为它不显示类别,但我觉得它是不必要的,因为它与原来的重复相同:
$page['eData'] = [
'codeMoneyFormatter' => $this->moneyFormatter->getcodeMoneyFormatter(),
'checkout' => [
'actionField' => ['step' => 3, 'option' => 'Review Order'],
'products' => $this->getCheckoutFromOrder($order),
],
];
它重复几乎相同的功能,它不是 DRY 的正确标准(不要重复自己)这就是为什么我想实现array_filter()
但如何实现???
解决方案
Array_Filter 所以我需要一个正确的方法来实现,因为有时 getCategoryTree() 为空或带有空值
很简单,不要更改类型并给数组过滤器提供它不应该吃的东西。
array_filter($category ? $this->getCategoryTree($category->getId()) : '');
应该是(类似)
$data = $category ? $this->getCategoryTree($category->getId()) : [];
if(!is_array($data)) $data = [];
array_filter($data);
您可能可以比这更简单。但是,PHP 中的类型更改可能会很麻烦,因为该语言的类型很松散,不会抱怨太多。
这可以很容易地测试
var_dump(array_filter(''));
输出
<br />
<b>Warning</b>: array_filter() expects parameter 1 to be array, string given in <b>[...][...]</b> on line <b>3</b><br />
NULL
另一方面,这
var_dump(array_filter([]));
只需返回一个空数组。
我要说的最后一件事是,您在问题中输入的大约 80% 的代码对于回答问题是不必要的,只会混淆其他用户。
推荐阅读
- angularjs - 如何在实现 ag 网格列的单元格编辑器中实现搜索?
- flutter - Flutter:在主题中指定按钮的文本样式
- javascript - React Native - TypeError:未定义不是对象
- javascript - 如何在分页中添加上一个和下一个
- list - Kotlin:如何组合列表中的某些数据
- nestjs - 来自谷歌的不记名令牌的nestjs无效算法错误
- pandas - 如何使用 pandas 和 python 简化学生成绩的代码
- react-native - 我的项目在运行时遇到错误。任何人都可以解决这个问题吗?
- python - Django Rest Framework:处理多对多关系
- python - 在词汇表中查找具有最长公共前缀的单词