Версия PHP 5.3 против версии 5.6 и выше

Насколько я понимаю, PHP версии 5.6 и выше поддерживает использование [] (квадратные скобки) для массива. У меня есть функциональный код:

$sortedMainCatArray[$letter][] = $eachMainCategory;

это хорошо работает на PHP версии 5.6. Что этот код по сути делает, так это то, что он помещает значения массива в $ sortedMainCatArray с предустановленным ключом. (например, a / b / c) Результат выглядит примерно так при использовании print_r.

Array
(
    [A] => Array
        (
          [0] => Array
              (
                [mainCatID] => 33
                [mainCatDesc] => Alternative Medicine
                [mainCatAddedDate] => 2017-12-18 10:35:31
                [mainCatStatus] => active
              )

          [1] => Array
              (
                [mainCatID] => 32
                [mainCatDesc] => Anesthesiology
                [mainCatAddedDate] => 2017-12-18 10:29:48
                [mainCatStatus] => active
              )
        )

    [B] => Array
        (
          [0] => Array
              (
                [mainCatID] => 1
                [mainCatDesc] => Blood & Infection
                [mainCatAddedDate] => 2017-12-18 10:29:28
                [mainCatStatus] => active
              )
        )
)

Однако, поскольку PHP версии 5.3 не поддерживает использование [] (квадратные скобки), я должен изменить свой код. Что у меня было:

$sortedMainCatArray[$letter] = array($eachMainCategory);

Однако это привело только к тому, что каждый алфавитный массив имел только одно значение. Пример можно увидеть ниже, где в категории "А" есть только одно значение (анестезиология) вместо двух (альтернативная медицина и анестезиология).

Array
(
    [A] => Array
        (
          [0] => Array
              (
                [mainCatID] => 32
                [mainCatDesc] => Anesthesiology
                [mainCatAddedDate] => 2017-12-18 10:29:48
                [mainCatStatus] => active
              )
        )

    [B] => Array
        (
          [0] => Array
              (
                [mainCatID] => 1
                [mainCatDesc] => Blood & Infection
                [mainCatAddedDate] => 2017-12-18 10:29:28
                [mainCatStatus] => active
              )
        )
)

Как еще я могу изменить свой код для работы в PHP версии 5.3, как он работал в версии 5.6 без использования скобок []? Ценю всю помощь, оказанную! Спасибо!

2 ответа

Решение

Синтаксис короткого массива был введен в 5.4. Но вы не поняли. Это поддерживает [] вместо array() синтаксис для литеральных объявлений.

Тем не менее, синтаксис

$array[$index][] = $someVar;

не имеет ничего общего с синтаксисом короткого массива. Это действует с самого начала PHP. Вы можете использовать этот синтаксис и в более старой версии.

Когда код изменен на

$sortedMainCatArray[$letter] = array($eachMainCategory);

в основном это говорит о том, что не следует создавать подмассив с индексом $letter основного массива (несколько вызовов этой строки приводят к нескольким элементам в подмассиве), но назначают array($eachMainCategory) этому индексу (несколько вызовов этой строки присваивают один и тот же массив этому индексу несколько раз). Подвести итоги, оставив

$sortedMainCatArray[$letter][] = $eachMainCategory;

для обеих версий PHP это нормально.

ОБНОВИТЬ

Доступ к элементу массива по определенному индексу, когда этот массив возвращается функцией, вызывается array dereferencing support и был также добавлен в 5.4, так что один лайнер, разрешенный им functionThatReturnsArray()[$index] может быть сделано только в двух выражениях (строках) в PHP до 5.4, как показано в разделе примеров PHP-руководства:

// on PHP 5.4 
$secondElement = getArray()[1];

// previously  
$tmp = getArray();
$secondElement = $tmp[1]; 

Вы должны быть в состоянии использовать array_push ():

array_push($sortedMainCatArray[$letter], $eachMainCategory);
Другие вопросы по тегам