如何实现array_filter()使其更清晰

时间:2018-10-11 00:31:49

标签: php symfony

我需要在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()的原因,但是如何实现?

1 个答案:

答案 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

Sandbox

另一方面

 var_dump(array_filter([]));

简单地返回一个空数组。

我要说的最后一件事是,您在问题中输入的代码中约有80%不需要回答问题,只会使其他用户感到困惑。