【问题标题】:Looping multi-dimensional arrays in PHP 7.2在 PHP 7.2 中循环多维数组
【发布时间】:2018-12-07 22:35:29
【问题描述】:

我刚刚升级到 PHP 7.2,我收到 PHP Fatal error: Uncaught Error: Cannot use string offset as an array for line $myarray[$ex][0] = $oldarray[$z]['ID'];在这个旧代码中......

                $ex=0;
                $z=0;
                while($oldarray[$z]['ID']){
                    if(0==$duplicatename or !$duplicatename){
                        $ex++;
                        $myarray[$ex][0] = $oldarray[$z]['ID'];
                        /*...*/
                    }
                    $z++;
                }

我了解到最新版本的 PHP 有 backward incompatible changes,所以我将违规行更改为 $myarray[$ex]['ID'] = $oldarray[$z]['ID'];,但我遇到了同样的错误。

这段代码来自的网站很旧,所以我真的期待更多的问题不仅仅是这一段代码。谁能告诉我我在这里做错了什么。

这里是$oldarray的var_dump,我稍微修改了一下内容...

array(4) { [0]=> array(11) { ["ID"]=> int(59480) ["boxid"]=> int(11158) ["galleryurl"]=> string(75 ) "http://..." ["gallerytitle"]=> string(63) "画廊标题在这里" ["gallerytype"]=> string(5) "photo" ["gallerydate"]=> int( 1542544634) ["galleryactive"]=> string(1) "y" ["usersubmitted"]=> string(1) "n" ["userip"]=> NULL ["galleryhot"]=> string(1) " n" ["gallidentify"]=> int(372239531175) } 1=> array(11) { ["ID"]=> int(59324) ["boxid"]=> int(11158) ["galleryurl" ]=> string(79) "http://..." ["gallerytitle"]=> string(45) "画廊标题在这里" ["gallerytype"]=> string(5) "photo" ["gallerydate "]=> int(1538477012) ["galleryactive"]=> string(1) "y" ["usersubmitted"]=> string(1) "n" ["userip"]=> NULL ["galleryhot"]= > string(1) "n" ["gallidentify"]=> int(428341079414) } }

【问题讨论】:

  • $oldarray 看起来像什么? $myarray 长什么样子?
  • 你可以做一个 is_array() 检查元素是否确实是数组
  • @miken32 这是旧代码,不是最好的,但 $oldarray[integer]['string'] 和 $myarray 现在与 $oldarray 的格式相同。
  • var_dump 它并编辑您的问题以包含该信息。在minimal reproducible example 上查看更多信息。
  • 你的错误信息也会告诉你究竟是哪一行导致了这个问题。

标签: php arrays while-loop php-7.2


【解决方案1】:

是否有可能使用 foreach 对其进行重构?

http://php.net/manual/en/control-structures.foreach.php

如果你会使用你会得到什么:

print_r($oldarray);
print_r($myarray);

?

您有一定的概率在第二个数组维度中有对象... 我们需要看到更大的代码来有效地帮助你......

如果你改变会发生什么:

$myarray[$ex][0] = $oldarray[$z]['ID'];

这样:

$myarray[$ex][0] = $oldarray[$z].ID;

?

【讨论】:

  • 尝试添加:def $myarray = array();在您的代码片段开始时,以确保其以适当的方式声明。
  • 欢迎来到 Stackoverflow,谢谢。我认为使用foreach 可能是要走的路。我现在就玩弄它。
  • 什么会像这个例子一样做类似的事情:php.net/manual/en/function.array-push.php#83388?感谢您投票给我 :)
猜你喜欢
  • 1970-01-01
  • 2013-06-25
  • 2019-07-17
  • 2012-05-13
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多