为什么只有一个赋值时数组中的两个元素?

时间:2013-11-16 07:39:28

标签: php arrays

在我的PHP(5.4.19)应用程序中,我将字符串值分配给两个不同的数组。一个数组作用于方法,另一个数组是类属性:

class AnyClass{
   public $foo = array();

   public function anyMethod(){
       $bar = array();
       $bar[]       = 'anyTextA';
       $this->foo[] = 'anyTextB';
       return array( $bar, $this->foo );
   }
}

这是anyMethod()返回的内容:

Array
    (
        [0] => Array
            (
                [0] => anyTextA
            )

        [1] => Array
            (
                [0] => anyTextB
                [1] => anyTextB
            )

    )

为什么只有一个作业发生时,第二个数组中出现了两个元素?

5 个答案:

答案 0 :(得分:4)

您必须多次调用此方法。

$this->foo[] = 'anyTextB';

此语句adds再向$this->foo输入一个条目,而另一个语句$bar = array();每次都创建一个新数组。因此,如果您运行此方法两次,您将获得$foo的两个值,但$bar仍然有一个值。

正如我在第一条评论中所说,如果您向我们展示如何创建该类的实例,我们将能够更准确地告诉您在哪里复制该呼叫。

与其他地方的建议相反, 使用$this->foo=array();。调试你的问题并解决问题所在,而不是仅仅提出一个临时修复来隐藏错误并在其上构建更多代码。

答案 1 :(得分:1)

您正在调用该方法两次。

这可能是因为您在尝试回显结果时在AND之前调用该方法。

但也可能是因为您在IDE中工作,例如,IDE在监视列表中设置了方法。

答案 2 :(得分:1)

您可以两次致电anyMethod()

尝试在数组foo中添加索引。

例如:$this->foo[1] = 'anyTextB';

问题不应再发生了。

答案 3 :(得分:1)

$foo数组中的分配数量取决于anyMethod()执行的次数

即。如果anyMethod()被执行一次,它将只包含一个值,如果anyMethod()被执行5次,它将包含5个值

由于$foo数组的作用域位于anyMethod()之外,因此每次执行anyMethod()函数时都会将值添加到其中

但是对于$bar数组,它的范围在anyMethod()内。每次$bar执行

时,它都会将anyMethod()初始化为新数组

如果你想避免这个问题

$foo = array();

中使用此行anyMethod()

答案 4 :(得分:0)

试试这样......你会得到你期望得到的东西。

$var = new AnyClass;
var_dump($var->anyMethod());

输出:

array(2) {
  [0]=>
  array(1) {
    [0]=>
    string(8) "anyTextA"
  }
  [1]=>
  array(1) {
    [0]=>
    string(8) "anyTextB"
  }
}