【问题标题】:Object Loop Not Working as Expected对象循环未按预期工作
【发布时间】:2012-09-01 14:35:21
【问题描述】:

老实说,我刚开始学习对象,我被卡住了。

我想遍历一个对象数组并显示每个对象的名称和描述。但要么什么都不显示,要么先显示所有名称,然后显示所有描述。

我正在将信息从 API 提取到对象中:

// get tasks
foreach($tasksList->items  as $task_details) {
    $tasks_name[$task_details->id]=$task_details->name;
    $tasks_desc[$task_details->id]=$task_details->description;
    $tasks_details[$task_details->id]=$task_details->id;
    $tasks_progress[$task_details->id]=$task_details->progress;
}

foreach($tasks_name as $taskid=>$my_task_name) {
    echo "Task_Name: " . $my_task_name . "</br>";
    $task_id = $task_details->id;

    foreach($tasks_desc as $taskid1=>$my_task_desc) {
        if($taskid==$task_details->id) {
            echo "Task_Desc: " . $my_task_desc . "</br>";   
        }
    }   
}

现在我不明白的是:在第一个 foreach 循环中,它就像 i=0 时的 while 循环,它检查 $tasks_name[0],然后检查 $tasks_name[1] 等等。

但是,我不确定如何确定当前循环中的 id 是什么,所以我可以告诉它只打印当前循环的描述而不显示所有这些。

说实话,我是从另一个例子中复制的,但我不太明白。我打算更多地研究对象,但这阻碍了我当前的代码:

foreach($tasks_desc as $taskid1=>$my_task_desc)

我知道它正在循环遍历所有$tasks_desc 并将值分配给$my_task_desc,但$taskid 的意义是什么?

对于新手问题,我们深表歉意。 :)

【问题讨论】:

  • 我们能看到你的对象的sn-p吗print_r($yourObject)
  • 你不需要第二个循环。 $tasks_desc[$task_details->id] 会为您完成。

标签: php object foreach


【解决方案1】:

这个写的不好。如果是教程,我会继续阅读另一个教程。要么是那个,要么是 task_id 被使用的那行被忽略了。

无论如何,tasks_name 是一个由 ID 索引的任务数组。因此,第二个块中的外部循环遍历该数组的键/值(ID 是键,taskid。它是由上面第一个循环中的$task_details-&gt;id 分配的)。

第二个循环再次遍历所有任务,但这次是通过描述 task_desc 而不是名称。它正在尝试查找 ID 与之前的 task_name 的 ID 匹配的 task_desc(这将使其成为相同的任务)。

不过,这是不必要的,因为您可以将所有条目(名称、描述等)存储在一个由 ID 索引的数组中,而不是将每个条目存储在它们自己的数组中:

(这是第一个循环):

foreach($tasksList->items  as $task_details) {
   $all_tasks[$task_details->id]['name'] = $task_details->name;
   $all_tasks[$task_details->id]['desc'] =$task_details->description;
   // Don't need the ID again; it's the key
   $all_tasks[$task_details->id]['progress'] = $task_details->progress;
}

但是,您甚至不需要这样做,因为您可以在需要时迭代tasksList-&gt;items

【讨论】:

    【解决方案2】:

    不需要两个循环。要显示每个对象的名称和描述,一个循环就足够了:

    foreach($tasksList->items  as $task_details) {
        echo 'name: ', htmlspecialchars($task_details->name);
        echo ', description: ', htmlspeciachars($task_details->description);
    }
    

    (我也不明白为什么要先将每个对象字段存储在自己的数组中?)

    【讨论】:

      猜你喜欢
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      相关资源
      最近更新 更多