数组返回错误值 laravel

Posted

技术标签:

【中文标题】数组返回错误值 laravel【英文标题】:array return wrong value laravel 【发布时间】:2015-09-03 03:44:59 【问题描述】:

我发出一个 ajax 请求,响应它是一个图像数组,问题是我回显了数组的值及其我想要的值,但是当 foreach 结束时,我看到每个值都有数组它被数组的最后一项改变了

foreach ($x as $y) 
    $auxImg->misc_id    = $y->misc_id;
            $auxImg->image      = $y->image;

    $aux[$i] = $auxImg;
    echo $aux[$i]->image.' ';
    //response of the array in the echo

    /* 5/maqueta.png - 5/ponto.png - 5/ciades.jpg - 5/35235.jpg */
    $i++;

echo var_dump($aux);


//response in the var_dump of the aux array
array(4) 
  [0]=>
  object(stdClass)#400 (2) 
    ["misc_id"]=>
    int(9)
    ["image"]=>
    string(11) "5/35235.jpg"
  
  [1]=>
  object(stdClass)#400 (2) 
    ["misc_id"]=>
    int(9)
    ["image"]=>
    string(11) "5/35235.jpg"
  
  [2]=>
  object(stdClass)#400 (2) 
    ["misc_id"]=>
    int(9)
    ["image"]=>
    string(11) "5/35235.jpg"
  
  [3]=>
  object(stdClass)#400 (2) 
    ["misc_id"]=>
    int(9)
    ["image"]=>
    string(11) "5/35235.jpg"
  

我真的不明白为什么会这样,这是我唯一一次使用 $aux var 请帮助

【问题讨论】:

【参考方案1】:

这里的问题是$auxImg 始终是同一个对象,因此在每一步中您都修改此对象并将其附加到数组中,但是因为$auxImg 是一个对象,所以它没有被复制。

你应该添加

$auxImg = new stdClass();

$auxImg = clone $auxImg;

(取决于您在循环之前使用的代码)

之后:

foreach ($x as $y) 

得到预期的结果。

【讨论】:

谢谢它确实有效,但我仍然不明白为什么它在循环和外部显示不同的值? 这是因为 php 中的对象没有被复制,所以在循环中当你赋值时你会看到这个值,但在循环之后你会看到相同的值。您可以将其与以下内容进行比较:$x = new stdClass(); $x->a = 5; echo $x->a; $y = $x; $y->a = 10; echo $y->a; echo $x->a; 当您要复制对象时,您需要使用 clone

以上是关于数组返回错误值 laravel的主要内容,如果未能解决你的问题,请参考以下文章

pyopencl 在数组中返回错误的 float3 值

Pycuda 在函数参数中按值声明数组时返回错误

当我尝试从 PHP 对象/数组返回值时,出现 500 错误。但是可以返回所有对象

Pycuda 在函数参数中按值声明数组时返回错误

当我尝试运行 gradle 时,Graphql 将错误返回为“无法解析 `Array` 值,预期数组”

具有索引值的线性搜索返回数组位于