PHP Version 5.3 vs 5.6及以上版本

时间:2018-01-30 04:00:00

标签: php arrays versions square-bracket

据我了解,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);

但是,这只会导致每个字母数组只有一个值。下面是一个例子,在“A”类别下,只有一个值(麻醉学)而不是两个(替代医学和麻醉学)。

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 个答案:

答案 0 :(得分:3)

5.4中的短数组语法为introduced。但你误解了。对于文字声明,这支持[]而不是array()语法。

然而,语法

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

与短数组语法无关。自PHP开始以来它一直有效。您也可以在旧版本中使用此语法。

当代码更改为

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

它基本上表示不要在主数组的$ letter索引处创建子数组(对此行的多次调用会导致子数组中的多个元素),但会将array($eachMainCategory)分配给该索引(多次调用此行多次为该索引分配相同的数组)。总结一下,离开

$sortedMainCatArray[$letter][] = $eachMainCategory;
两个PHP版本的

都可以。

<强>更新

当函数返回该数组时,在特定索引处访问数组元素称为array dereferencing support,并且还在5.4中添加,因此functionThatReturnsArray()[$index]允许的一个内联只能在PHP中的两个表达式(行),如PHP manual examples部分所示:

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

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

答案 1 :(得分:1)

您应该可以使用array_push()

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