首页 > 解决方案 > 如何实现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()但如何实现???

标签: phpsymfony

解决方案


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% 的代码对于回答问题是不必要的,只会混淆其他用户。


推荐阅读