第二次从数组中删除 stdclass 对象总是失败
Remove stdclass object from array second time always fails
你能帮我找出代码中的问题吗?我有一个从 json 字符串中删除图像的功能。我会为我的代码提供解释。
这是我的测试控制器,用于测试我的代码
<?php class Test extends CI_Controller {
public function __construct(){
parent::__construct();
$this->load->model('Model_products');
}
public function index(){
echo 'This is test controller';
$id_product = 1;
$id_image = 3;
$prod = $this->Model_products->getCurrentUserProduct($id_product);
$images = json_decode($prod[0]->images);
var_dump($images);
foreach($images as $i){
if($i->id_image == $id_image){
unset($images[$i->id_image]);
}
}
$n = 0;
foreach($images as $i){
$i->id_image = $n;
$i->position = $n;
$n++;
}
var_dump($images);
$this->Model_products->updateProductImages($id_product, json_encode($images));
die();
}
}
第一个 var_dump($images) 输出是
array (size=5)
0 =>
object(stdClass)[24]
public 'id_image' => int 0
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/f81e86620f557fa9fc5e71d063c12d6a.jpg' (length=102)
public 'thumbName' => string 'f81e86620f557fa9fc5e71d063c12d6a.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/2b6cfd74e622c4a61793259438b90b39.jpg' (length=108)
public 'imageName' => string '2b6cfd74e622c4a61793259438b90b39.jpg' (length=36)
public 'position' => int 0
1 =>
object(stdClass)[30]
public 'id_image' => int 1
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/458270b1c351bf23a4c943ae9b393eb5.jpg' (length=102)
public 'thumbName' => string '458270b1c351bf23a4c943ae9b393eb5.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/425a2346219aca49e0c1048da14d6276.jpg' (length=108)
public 'imageName' => string '425a2346219aca49e0c1048da14d6276.jpg' (length=36)
public 'position' => int 1
2 =>
object(stdClass)[31]
public 'id_image' => int 2
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/11bbe81edace48a1d6e03159c72bfc7f.jpg' (length=102)
public 'thumbName' => string '11bbe81edace48a1d6e03159c72bfc7f.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/a0d9059a611d49ea84c1e57c683b643b.jpg' (length=108)
public 'imageName' => string 'a0d9059a611d49ea84c1e57c683b643b.jpg' (length=36)
public 'position' => int 2
3 =>
object(stdClass)[32]
public 'id_image' => int 3
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/0702f21fc6f7773aa5f44f4115241a35.jpg' (length=102)
public 'thumbName' => string '0702f21fc6f7773aa5f44f4115241a35.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/d9dfb48ddee4a20e35cb433619f0da0b.jpg' (length=108)
public 'imageName' => string 'd9dfb48ddee4a20e35cb433619f0da0b.jpg' (length=36)
public 'position' => int 3
4 =>
object(stdClass)[33]
public 'id_image' => int 4
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/32e902b9e64758f4dca64039833cbf0a.jpg' (length=102)
public 'thumbName' => string '32e902b9e64758f4dca64039833cbf0a.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/e31eaac5e991baf862d2ecc264145642.jpg' (length=108)
public 'imageName' => string 'e31eaac5e991baf862d2ecc264145642.jpg' (length=36)
public 'position' => int 4
这是正确的,因为我的产品有 5 张图片
现在我遍历 $images 并且我不想删除数组对象,其中 $id_image = 3。
所以这是我认为正确的第二个 var_dump($images) 输出,因为在我的代码中我删除了一个数组和 "reset" 图像和位置的 id
array (size=4)
0 =>
object(stdClass)[24]
public 'id_image' => int 0
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/f81e86620f557fa9fc5e71d063c12d6a.jpg' (length=102)
public 'thumbName' => string 'f81e86620f557fa9fc5e71d063c12d6a.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/2b6cfd74e622c4a61793259438b90b39.jpg' (length=108)
public 'imageName' => string '2b6cfd74e622c4a61793259438b90b39.jpg' (length=36)
public 'position' => int 0
1 =>
object(stdClass)[30]
public 'id_image' => int 1
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/458270b1c351bf23a4c943ae9b393eb5.jpg' (length=102)
public 'thumbName' => string '458270b1c351bf23a4c943ae9b393eb5.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/425a2346219aca49e0c1048da14d6276.jpg' (length=108)
public 'imageName' => string '425a2346219aca49e0c1048da14d6276.jpg' (length=36)
public 'position' => int 1
2 =>
object(stdClass)[31]
public 'id_image' => int 2
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/11bbe81edace48a1d6e03159c72bfc7f.jpg' (length=102)
public 'thumbName' => string '11bbe81edace48a1d6e03159c72bfc7f.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/a0d9059a611d49ea84c1e57c683b643b.jpg' (length=108)
public 'imageName' => string 'a0d9059a611d49ea84c1e57c683b643b.jpg' (length=36)
public 'position' => int 2
4 =>
object(stdClass)[33]
public 'id_image' => int 3
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/32e902b9e64758f4dca64039833cbf0a.jpg' (length=102)
public 'thumbName' => string '32e902b9e64758f4dca64039833cbf0a.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/e31eaac5e991baf862d2ecc264145642.jpg' (length=108)
public 'imageName' => string 'e31eaac5e991baf862d2ecc264145642.jpg' (length=36)
public 'position' => int 3
所以现在问题出现了,如果我再次尝试 return 这段代码(只需按 F5)
我从第一个 var_dump($images)
得到输出
object(stdClass)[24]
public '0' =>
object(stdClass)[30]
public 'id_image' => int 0
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/f81e86620f557fa9fc5e71d063c12d6a.jpg' (length=102)
public 'thumbName' => string 'f81e86620f557fa9fc5e71d063c12d6a.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/2b6cfd74e622c4a61793259438b90b39.jpg' (length=108)
public 'imageName' => string '2b6cfd74e622c4a61793259438b90b39.jpg' (length=36)
public 'position' => int 0
public '1' =>
object(stdClass)[31]
public 'id_image' => int 1
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/458270b1c351bf23a4c943ae9b393eb5.jpg' (length=102)
public 'thumbName' => string '458270b1c351bf23a4c943ae9b393eb5.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/425a2346219aca49e0c1048da14d6276.jpg' (length=108)
public 'imageName' => string '425a2346219aca49e0c1048da14d6276.jpg' (length=36)
public 'position' => int 1
public '2' =>
object(stdClass)[32]
public 'id_image' => int 2
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/11bbe81edace48a1d6e03159c72bfc7f.jpg' (length=102)
public 'thumbName' => string '11bbe81edace48a1d6e03159c72bfc7f.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/a0d9059a611d49ea84c1e57c683b643b.jpg' (length=108)
public 'imageName' => string 'a0d9059a611d49ea84c1e57c683b643b.jpg' (length=36)
public 'position' => int 2
public '4' =>
object(stdClass)[33]
public 'id_image' => int 3
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/32e902b9e64758f4dca64039833cbf0a.jpg' (length=102)
public 'thumbName' => string '32e902b9e64758f4dca64039833cbf0a.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/e31eaac5e991baf862d2ecc264145642.jpg' (length=108)
public 'imageName' => string 'e31eaac5e991baf862d2ecc264145642.jpg' (length=36)
public 'position' => int 3
以及下面的错误
Fatal error: Cannot use object of type stdClass as array in /home/valor/development/euro-swap.com/public_html/server/application/controllers/Test.php on line 18
这是怎么回事?为什么代码总是第一次有效,但每次总是失败?
如果您需要任何其他信息,请告诉我,我会提供。
不能将对象 ( $object->属性 ) 用作 $object['property']
但这是对象,语法是 $obj->属性
数组为 $array['offset']
或使用 $query->result_array() 代替 $query->result()
和return在模型方法中查询对象,这样比较方便
你可以试试
json_decode($yourJson,true);
for force return 关联数组
你能帮我找出代码中的问题吗?我有一个从 json 字符串中删除图像的功能。我会为我的代码提供解释。
这是我的测试控制器,用于测试我的代码
<?php class Test extends CI_Controller {
public function __construct(){
parent::__construct();
$this->load->model('Model_products');
}
public function index(){
echo 'This is test controller';
$id_product = 1;
$id_image = 3;
$prod = $this->Model_products->getCurrentUserProduct($id_product);
$images = json_decode($prod[0]->images);
var_dump($images);
foreach($images as $i){
if($i->id_image == $id_image){
unset($images[$i->id_image]);
}
}
$n = 0;
foreach($images as $i){
$i->id_image = $n;
$i->position = $n;
$n++;
}
var_dump($images);
$this->Model_products->updateProductImages($id_product, json_encode($images));
die();
}
}
第一个 var_dump($images) 输出是
array (size=5)
0 =>
object(stdClass)[24]
public 'id_image' => int 0
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/f81e86620f557fa9fc5e71d063c12d6a.jpg' (length=102)
public 'thumbName' => string 'f81e86620f557fa9fc5e71d063c12d6a.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/2b6cfd74e622c4a61793259438b90b39.jpg' (length=108)
public 'imageName' => string '2b6cfd74e622c4a61793259438b90b39.jpg' (length=36)
public 'position' => int 0
1 =>
object(stdClass)[30]
public 'id_image' => int 1
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/458270b1c351bf23a4c943ae9b393eb5.jpg' (length=102)
public 'thumbName' => string '458270b1c351bf23a4c943ae9b393eb5.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/425a2346219aca49e0c1048da14d6276.jpg' (length=108)
public 'imageName' => string '425a2346219aca49e0c1048da14d6276.jpg' (length=36)
public 'position' => int 1
2 =>
object(stdClass)[31]
public 'id_image' => int 2
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/11bbe81edace48a1d6e03159c72bfc7f.jpg' (length=102)
public 'thumbName' => string '11bbe81edace48a1d6e03159c72bfc7f.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/a0d9059a611d49ea84c1e57c683b643b.jpg' (length=108)
public 'imageName' => string 'a0d9059a611d49ea84c1e57c683b643b.jpg' (length=36)
public 'position' => int 2
3 =>
object(stdClass)[32]
public 'id_image' => int 3
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/0702f21fc6f7773aa5f44f4115241a35.jpg' (length=102)
public 'thumbName' => string '0702f21fc6f7773aa5f44f4115241a35.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/d9dfb48ddee4a20e35cb433619f0da0b.jpg' (length=108)
public 'imageName' => string 'd9dfb48ddee4a20e35cb433619f0da0b.jpg' (length=36)
public 'position' => int 3
4 =>
object(stdClass)[33]
public 'id_image' => int 4
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/32e902b9e64758f4dca64039833cbf0a.jpg' (length=102)
public 'thumbName' => string '32e902b9e64758f4dca64039833cbf0a.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/e31eaac5e991baf862d2ecc264145642.jpg' (length=108)
public 'imageName' => string 'e31eaac5e991baf862d2ecc264145642.jpg' (length=36)
public 'position' => int 4
这是正确的,因为我的产品有 5 张图片
现在我遍历 $images 并且我不想删除数组对象,其中 $id_image = 3。 所以这是我认为正确的第二个 var_dump($images) 输出,因为在我的代码中我删除了一个数组和 "reset" 图像和位置的 id
array (size=4)
0 =>
object(stdClass)[24]
public 'id_image' => int 0
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/f81e86620f557fa9fc5e71d063c12d6a.jpg' (length=102)
public 'thumbName' => string 'f81e86620f557fa9fc5e71d063c12d6a.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/2b6cfd74e622c4a61793259438b90b39.jpg' (length=108)
public 'imageName' => string '2b6cfd74e622c4a61793259438b90b39.jpg' (length=36)
public 'position' => int 0
1 =>
object(stdClass)[30]
public 'id_image' => int 1
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/458270b1c351bf23a4c943ae9b393eb5.jpg' (length=102)
public 'thumbName' => string '458270b1c351bf23a4c943ae9b393eb5.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/425a2346219aca49e0c1048da14d6276.jpg' (length=108)
public 'imageName' => string '425a2346219aca49e0c1048da14d6276.jpg' (length=36)
public 'position' => int 1
2 =>
object(stdClass)[31]
public 'id_image' => int 2
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/11bbe81edace48a1d6e03159c72bfc7f.jpg' (length=102)
public 'thumbName' => string '11bbe81edace48a1d6e03159c72bfc7f.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/a0d9059a611d49ea84c1e57c683b643b.jpg' (length=108)
public 'imageName' => string 'a0d9059a611d49ea84c1e57c683b643b.jpg' (length=36)
public 'position' => int 2
4 =>
object(stdClass)[33]
public 'id_image' => int 3
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/32e902b9e64758f4dca64039833cbf0a.jpg' (length=102)
public 'thumbName' => string '32e902b9e64758f4dca64039833cbf0a.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/e31eaac5e991baf862d2ecc264145642.jpg' (length=108)
public 'imageName' => string 'e31eaac5e991baf862d2ecc264145642.jpg' (length=36)
public 'position' => int 3
所以现在问题出现了,如果我再次尝试 return 这段代码(只需按 F5) 我从第一个 var_dump($images)
得到输出object(stdClass)[24]
public '0' =>
object(stdClass)[30]
public 'id_image' => int 0
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/f81e86620f557fa9fc5e71d063c12d6a.jpg' (length=102)
public 'thumbName' => string 'f81e86620f557fa9fc5e71d063c12d6a.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/2b6cfd74e622c4a61793259438b90b39.jpg' (length=108)
public 'imageName' => string '2b6cfd74e622c4a61793259438b90b39.jpg' (length=36)
public 'position' => int 0
public '1' =>
object(stdClass)[31]
public 'id_image' => int 1
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/458270b1c351bf23a4c943ae9b393eb5.jpg' (length=102)
public 'thumbName' => string '458270b1c351bf23a4c943ae9b393eb5.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/425a2346219aca49e0c1048da14d6276.jpg' (length=108)
public 'imageName' => string '425a2346219aca49e0c1048da14d6276.jpg' (length=36)
public 'position' => int 1
public '2' =>
object(stdClass)[32]
public 'id_image' => int 2
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/11bbe81edace48a1d6e03159c72bfc7f.jpg' (length=102)
public 'thumbName' => string '11bbe81edace48a1d6e03159c72bfc7f.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/a0d9059a611d49ea84c1e57c683b643b.jpg' (length=108)
public 'imageName' => string 'a0d9059a611d49ea84c1e57c683b643b.jpg' (length=36)
public 'position' => int 2
public '4' =>
object(stdClass)[33]
public 'id_image' => int 3
public 'thumbImage' => string '/home/valor/development/euro-swap.com/public_html/images/products/32e902b9e64758f4dca64039833cbf0a.jpg' (length=102)
public 'thumbName' => string '32e902b9e64758f4dca64039833cbf0a.jpg' (length=36)
public 'image' => string '/home/valor/development/euro-swap.com/public_html/images/products/large/e31eaac5e991baf862d2ecc264145642.jpg' (length=108)
public 'imageName' => string 'e31eaac5e991baf862d2ecc264145642.jpg' (length=36)
public 'position' => int 3
以及下面的错误
Fatal error: Cannot use object of type stdClass as array in /home/valor/development/euro-swap.com/public_html/server/application/controllers/Test.php on line 18
这是怎么回事?为什么代码总是第一次有效,但每次总是失败? 如果您需要任何其他信息,请告诉我,我会提供。
不能将对象 ( $object->属性 ) 用作 $object['property']
但这是对象,语法是 $obj->属性
数组为 $array['offset']
或使用 $query->result_array() 代替 $query->result()
和return在模型方法中查询对象,这样比较方便
你可以试试
json_decode($yourJson,true);
for force return 关联数组