【问题标题】:PHP Array Warning: Creating default object from empty valuePHP 数组警告:从空值创建默认对象
【发布时间】:2016-01-08 17:40:38
【问题描述】:

我已将 MySQL 查询中的值放入一个数组中,以便对它们进行排序。一切都很好,除了我遇到很多错误

 Warning: Creating default object from empty value 

这样我就可以根据 post_id 和质量对数组进行排序

$count = 0;
$searcharticles = new stdClass();
$postid = 0;
while ($row = mysqli_fetch_object($result1) ) {

    $postid     = $row->ID;
    $title      = $row->post_title;
    $titlescore = $row->titlescore;
    $quality    = $row->quality;

    $searcharticles->$postid->post_id =$postid;
    $searcharticles->$postid->title =$title;
    $searcharticles->$postid->titlescore = $titlescore;
    $searcharticles->$postid->quality =$quality;

$count ++;
} 

Stackexchange 上的一些帖子表明我应该添加 $searcharticles = new stdClass();

但这并没有解决问题

我希望消除错误,而不仅仅是抑制警告。

有什么想法吗?

【问题讨论】:

  • 不,我先试过了。那就是我尝试添加 $searcharticles = new stdClass();和 $postid = new stdClass();代码行。
  • 是的 $postid 是一个整数。我已将代码更改为 $postid=0;但错误是一样的
  • 您要创建什么类型的结构?创建由整数 $postid 命名的对象属性是令人困惑的。如果$searcharticles 是一个集合,它应该是一个对象数组,例如您正在创建$searcharticles[$postid]->title = $title
  • ... 然后要求您首先将每个数组项初始化为一个新的 stdClass:$searcharticles[$postid] = new stdClass();,而不是将 $searcharticles 创建为 stdClass,而是将其创建为 array()。跨度>

标签: php arrays object


【解决方案1】:

你收到警告

警告:从空值创建默认对象

因为你这样做

$searcharticles->$postid->post_id = $postid;

您的 $searcharticles 是一个 StdClass。您分配属性$postId,然后立即链接另一个属性post_id,这会强制PHP 创建一个新的默认对象。

为了避免这种情况,把它放在链式方法调用之前:

$searcharticles->$postid = new StdClass;
$searcharticles->$postid->post_id =$postid;
$searcharticles->$postid->title =$title;
$searcharticles->$postid->titlescore = $titlescore;
$searcharticles->$postid->quality =$quality;

【讨论】:

    【解决方案2】:

    也许你的问题不是 $searcharticles,可能是 $row。

    试试

    $searcharticles = new stdClass; AND $row = new stdClass;
    

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      • 1970-01-01
      • 2012-10-30
      • 2013-06-19
      • 1970-01-01
      相关资源
      最近更新 更多