массивы — 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 без использования скобок []? Ценю всю помощь, оказанную! Спасибо!

1

Решение

Синтаксис короткого массива был введены в 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];
3

Другие решения

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

array_push($sortedMainCatArray[$letter], $eachMainCategory);
1

По вопросам рекламы [email protected]