Как реализовать array_filter (), чтобы сделать более понятным - PullRequest
0 голосов
/ 11 октября 2018

Мне нужна небольшая помощь в PHP, потому что я пытаюсь использовать array_filter(), чтобы предотвратить много строк и сделать это просто и понятно, но я борюсь в этом, даже если я читаюэта документация: Array_Filter , поэтому мне нужен правильный способ реализации, потому что иногда getCategoryTree() бывает пустым или со значениями NULL, которые я пытаюсь не показывать, я подумал создать другую функцию для отображениятолько конкретные вещи без категории, но я чувствую, что это неэффективно:

Я пытаюсь заполнить 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()) : '');
// -------------------------------------------------

Функция, которую я создал, чтобы показать только определенную вещь, она правильная, потому что она не показывает категорию, но я чувствую, что она не нужна, потому что она повторяет то же самое из oпервый:

$page['eData'] = [
    'codeMoneyFormatter' => $this->moneyFormatter->getcodeMoneyFormatter(),
    'checkout' => [
        'actionField' => ['step' => 3, 'option' => 'Review Order'],
        'products' => $this->getCheckoutFromOrder($order),
    ],
];

Он повторяет почти те же функции, и это не правильный стандарт DRY (не повторяйте себя), поэтому я подумал реализовать array_filter(), но как ???

1 Ответ

0 голосов
/ 11 октября 2018

Array_Filter, поэтому мне нужен правильный способ реализации, потому что иногда getCategoryTree () бывает пустым или со значениями NULL

Легко, не меняйте типы и не фильтруйте массив массивов, что-то этоне следует есть.

 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(''));

output

<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% кода, который вы указали в вопросе, были не нужны, чтобы ответить на вопрос, и это просто сбивает с толку других пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...