2013-02-21 86 views
0

一個有一個array這樣對於/的foreach循環停在第一conditoin永不恢復

Array 
(
    [0] => stdClass Object 
     (
      [user_id] => 3035 
      [category] => Preliminary 
      [value] => 0 
      [fullname] => 
      [studid] => 1202924 
      [remarks] => 
     ) 

    [1] => stdClass Object 
     (
      [user_id] => 3035 
      [category] => Midterm 
      [value] => 0 
      [fullname] => 
      [studid] => 1202924 
      [remarks] => 
     ) 

    [2] => stdClass Object 
     (
      [user_id] => 3035 
      [category] => Semi-Finals 
      [value] => 0 
      [fullname] => 
      [studid] => 1202924 
      [remarks] => 
     ) 

    [3] => stdClass Object 
     (
      [user_id] => 3035 
      [category] => Finals 
      [value] => 0 
      [fullname] => 
      [studid] => 1202924 
      [remarks] => 
     ) 

    [4] => stdClass Object 
     (
      [user_id] => 3035 
      [category] => Remedial 
      [value] => 0 
      [fullname] => 
      [studid] => 1202924 
      [remarks] => 
     ) 

    [5] => stdClass Object 
     (
      [user_id] => 3036 
      [category] => Preliminary 
      [value] => 0 
      [fullname] => 
      [studid] => 1202925 
      [remarks] => 
     ) 

    [6] => stdClass Object 
     (
      [user_id] => 3036 
      [category] => Midterm 
      [value] => 0 
      [fullname] => 
      [studid] => 1202925 
      [remarks] => 
     ) 

    [7] => stdClass Object 
     (
      [user_id] => 3036 
      [category] => Semi-Finals 
      [value] => 0 
      [fullname] => 
      [studid] => 1202925 
      [remarks] => 
     ) 

    [8] => stdClass Object 
     (
      [user_id] => 3036 
      [category] => Finals 
      [value] => 0 
      [fullname] => 
      [studid] => 1202925 
      [remarks] => 
     ) 

    [9] => stdClass Object 
     (
      [user_id] => 3036 
      [category] => Remedial 
      [value] => 0 
      [fullname] => 
      [studid] => 1202925 
      [remarks] => 
     ) 

我想這樣

Array 
(
    [0] => Array 
     (
      [fullname] => 
      [studid] => 1202924 
      [user_id] => 3035 
      [Preliminary] => 0 
      [Midterm] => 0 
      [Semi-Finals] => 0 
      [Finals] => 0 
      [Remedial] => 0 
     ), 
    [1] => array 
     (
      [fullname] => 
      [studid] => 1202925 
      [user_id] => 3036 
      [preliminary] => 0 
      [midterm] => 0 
      [semi-finals] => 0 
      [finals] => 0 
      [remedial] => 0 
     ) 
) 

基本上是由他們的studiduser_id將它們分組進行格式化

現在我嘗試了很多嘗試,如

$count = 0; 
$uid = $subject_student_grades[$count]->user_id; 

for($x=0;$x < count($subject_student_grades);$x++) 
{ 
    if($uid == $subject_student_grades[$x]->user_id) 
    { 
     $test[$count]['fullname'] = $subject_student_grades[$x]->fullname; 
     $test[$count]['studid'] = $subject_student_grades[$x]->studid; 
     $test[$count]['user_id'] = $subject_student_grades[$x]->user_id; 
     $test[$count][$subject_student_grades[$x]->category] =  $subject_student_grades[$x]->value; 
    }else{ 
     $count++; 
    } 
} 

$計數= 0; 的foreach($ subject_student_grades爲$值) {

$uid = $subject_student_grades[$count]->user_id; 

    if($uid == $value->user_id) 
    { 
     $test[$count]['fullname'] = $value->fullname; 
     $test[$count]['studid'] = $value->studid; 
     $test[$count]['user_id'] = $value->user_id; 
     $test[$count][$value->category] = $value->value; 

    }else{ 
     $count++; 
    } 
} 

但問題是,它循環只有第一部分中的一個與0指數和條件後停止,不處理或循環上休息,請注意指出我做錯了什麼?

編輯 所以現在我編輯它,並放置在計數foreach loop還在外面上第一array我想是不是重啓條件後的同一只迭代?如果我刪除else{}它會輸出一個不同於我所瞄準的最差的陣列結構。

我試圖echo出的其他東西,它echo's它,我覺得這裏的問題是,循環的條件去後,返回true並繼續到別處後,不會再回到if clause

+0

你是偶然試圖擺脫'json_decode()'產生的對象嗎? – 2013-02-21 10:20:38

+0

@ÁlvaroG.Vicario這是從數據庫返回的數據作爲對象 – tomexsans 2013-02-21 10:22:03

+0

@tomexsans我認爲你應該重塑你的SQL查詢然後。更好的查詢意味着更少的代碼,更少的負載,更快的客戶,等等...... – ppeterka 2013-02-21 10:24:18

回答

1

目前可以肯定的是在有一個錯誤,在第二循環中關於$count

foreach($subject_student_grades as $value) 
{ 
    $count = 0; //Why is that here? 

這樣,每次迭代將覆蓋$count0,所以$test陣列始終與0解決,所以元素0將是唯一一個在那裏。

這應該讀起來像:

$count = 0; 

foreach($subject_student_grades as $value) 
{ 
    $uid = $subject_student_grades[$count]->user_id; 
0

計數必須是外循環:

$count = 0; 
foreach($subject_student_grades as $value) 
{ 
    $uid = $subject_student_grades[$count]->user_id; 

    if($uid == $value->user_id) 
    { 
     $test[$count]['fullname'] = $value->fullname; 
     $test[$count]['studid'] = $value->studid; 
     $test[$count]['user_id'] = $value->user_id; 
     $test[$count][$value->category] = $value->value; 

    } 

    $count++; 
} 
0

一個foreach的觀點是這樣,你並不真的需要維護除了可能的計數建立一個新的數組(然而你可以使用簡寫)。

我只想做

$test = array(); 
foreach($subject_student_grades as $value) { 
    $temp = array(); 
    $temp['fullname'] = $value->fullname; 
    $temp['studid'] = $value->studid; 
    $temp['user_id'] = $value->user_id; 
    $temp[$value->category] = $value->value; 

    $test[] = $temp; # This is shorthand to assign the next numerical index 

} 

if語句似乎是多餘的,因爲它阻止算++當真正的循環將得到完全同步的作爲在foreach自動向前移動,而你的計數將不是第一次所以將永遠是一個