2012-09-01 52 views
0

我会诚实地说,我刚刚开始学习对象,我被卡住了。对象循环不能按预期工作

我想遍历一组对象并显示每个对象的名称和描述。但是不显示任何内容,或者首先显示所有名称,然后显示所有描述。

我从一个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的signifigance?

对不起,新手问题。 :)

+0

为什么你需要两个循环? – knittl

+0

我们可以看到你的对象'print_r($ yourObject)' –

+0

的片段,你不需要第二个循环。 $ tasks_desc [$ task_details-> id]会为你做。 –

回答

1

这是不好书面。如果是教程,我会转到另一个教程。无论是那个还是使用task_id的行都被省略了。

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

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

这是不必要的,但是,因为你可能只是所有条目(名称,说明等)存储在由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->items,当您需要。

1

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

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

(我也想不明白你为什么要对每个对象场存放在自己的数组第一?)