我会说实话,我刚开始学习物品而且我被卡住了。
我想遍历一个对象数组并显示每个对象的名称和描述。但是不显示任何内容,或者首先显示所有名称,然后显示所有描述。
我将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循环中,它就像一个while循环,而i = 0,它检查$ tasks_name [0],然后$ tasks_name [1],依此类推。
但是,我不知道如何弄清楚当前循环中的id是什么,所以我可以告诉它只打印当前循环的描述而不显示所有这些。
老实说,我是从另一个例子中复制这个,但我不太明白。我打算更多地研究对象,但这让我对目前的代码感到满意:
foreach($tasks_desc as $taskid1=>$my_task_desc)
我知道它循环遍历所有$tasks_desc
并将值分配给$my_task_desc
但$taskid
的意义是什么?
抱歉新手问题。 :)
答案 0 :(得分:1)
不需要两个循环。要显示每个对象的名称和描述,一个循环就足够了:
foreach($tasksList->items as $task_details) {
echo 'name: ', htmlspecialchars($task_details->name);
echo ', description: ', htmlspeciachars($task_details->description);
}
(我也不明白你为什么要先在自己的数组中存储每个对象字段?)
答案 1 :(得分:1)
写得不好。如果它是一个教程,我会继续学习另一个教程。无法使用task_id
或tasks_name
的行。
无论如何,taskid
是由ID索引的任务数组。因此,第二个块中的外部循环遍历该数组的键/值(ID是键$task_details->id
。它是由task_desc
在上面的第一个循环中分配的。
第二个循环再次遍历所有任务,但这次是通过描述task_desc
而不是名称。它试图找到task_name
,其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;
}
的ID相匹配(这将使其成为同一任务)。
这是不必要的,因为你可以将所有条目(名称,desc等)存储在一个由ID索引的数组中,而不是将每个条目存储在它们自己的数组中:
(这是第一个循环):
tasksList->items
但是,您甚至不需要 ,因为您可以在需要时迭代{{1}}。