我需要在PHP上提供一些帮助,因为我试图使用array_filter()
来防止出现多行,并且使其简洁明了,但是即使在我正在阅读本文档:Array_Filter,所以我需要一种正确的实现方式,因为有时getCategoryTree()
为空或具有空值(我试图不显示它),所以我想创建其他函数只显示没有类别的特定事物,但我觉得这样效率不高:
我正在尝试从URL 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()
的原因,但是如何实现?
答案 0 :(得分:0)
Array_Filter,所以我需要一种正确的实现方式,因为有时getCategoryTree()为空或具有空值
容易,不要更改类型,并且Feed数组过滤掉不该吃的东西。
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%不需要回答问题,只会使其他用户感到困惑。