PHP Краткая форма (одна строка) для добавления дочернего массива с ключом, если дочерний массив не пуст - PullRequest
0 голосов
/ 09 мая 2020

Я создал несколько функций для создания древовидной структуры, и в этом случае я использую часть следующего фрагмента для добавления дочернего массива, если существует хотя бы один дочерний элемент.

    <?php

    function addArrayIfNotEmpty($entire_array, $key, $childArray){

    /*
    ### BEGIN: Possible as one line? ###
    */
    if (count($childArray) > 0) {
        $entire_array[$key] = $childArray;      
    }
    /*
    ### END: Possible as one line? ###
    */

    return $entire_array;
}


$my_array = array();

$first_array = array("orange", "banana");
$second_array = array();

$my_array = addArrayIfNotEmpty($my_array, "first", $first_array);
$my_array = addArrayIfNotEmpty($my_array, "second", $second_array);

var_dump($my_array);

В моем реальном коде я использую только условие if между комментариями с «BEGIN» и «END», но я хотел бы изменить это условие if на одну строку.

Я думал примерно так:

$entire_array[$key] = count($childArray) > 0 ? $childArray : null;

Но в этом случае я получу пустой (ненужный) дочерний массив.

Что мне делать в этом случае? чехол?

1 Ответ

2 голосов
/ 09 мая 2020

Вы могли бы использовать тернарный оператор в качестве оператора и поместить присваивание в части true:

function addArrayIfNotEmpty($entire_array, $key, $childArray){
    count($childArray) ? $entire_array[$key] = $childArray : null;
    return $entire_array;
}

, но ваш существующий оператор if намного более читабелен .

Тестовый код:

$entire_array = array();
$entire_array = addArrayIfNotEmpty($entire_array, 'key1', array());
print_r($entire_array);
$entire_array = addArrayIfNotEmpty($entire_array, 'key2', array('hello'));
print_r($entire_array);

Вывод:

Array
(
)
Array
(
    [key2] => Array
        (
            [0] => hello
        )

)

Демо на 3v4l.org

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