【问题标题】:php: pushing to an array that may or may not existphp:推送到可能存在或不存在的数组
【发布时间】:2023-12-28 17:59:01
【问题描述】:

我想创建一个包含消息的数组。

$myArray = array('my message');

但使用此代码,myArray 将被覆盖,如果它已经存在。

如果我使用array_push,它必须已经存在。

$myArray = array(); // <-- has to be declared first.
array_push($myArray, 'my message');

否则,它会闪退。

有没有办法让上面的第二个例子工作,而不先清除$myArray = array();

【问题讨论】:

    标签: php arrays declaration push


    【解决方案1】:

    这里:

    $myArray[] = 'my message';
    

    $myArray 必须是数组或未设置。如果它保存的值是字符串、整数或未实现数组访问的对象,则会失败。

    【讨论】:

    • 这很奇怪,但这是真的。 PHP 不会触发任何错误/警告/通知。
    • ...一个非常有用的功能(至少对我来说)
    【解决方案2】:

    先检查数组是否存在,如果不存在,则创建它...然后添加元素,知道数组肯定会事先定义:

    if (!isset($myArray)) {
        $myArray = array();
    }
    
    array_push($myArray, 'my message');
    

    【讨论】:

    • snap ... 除了新的位,我认为它在 php 中不起作用
    • 嘿,是的......当你有太多的语言在你的脑海中漫游时会发生这种情况:-)
    【解决方案3】:

    你应该使用 is_array(),而不是 isset。 如果 myArray 是从返回数组或字符串的函数设置的(例如 -1 错误),则很有用

    如果 myArray 在其他地方声明为不是数组,这将防止错误。

    if(is_array($myArray))
    {
       array_push($myArray,'my message');
    }
    else
    {
       $myArray = array("my message");
    }
    

    【讨论】:

    • 你正确地提到了is_array,但是使用了不存在的函数array_exists。
    • 噢! TCL 挡路了:P
    【解决方案4】:
    if ($myArray) {
      array_push($myArray, 'my message');
    }
    else {
      $myArray = array('my message');
    }
    

    【讨论】:

    • 你应该测试一个 var 是否包含一个带有 isset 和 is_array 的数组。
    • 为什么是? is_array() 应该足够了。不设置几乎不可能是数组。
    • 是的,我的措辞不好。我的意思也是。应该使用或。
    【解决方案5】:

    OIS 的方式可行。

    或者

    if (!isset($myArray)) 
        $myArray=array();
    array_push($myArray, 'message');
    

    【讨论】: