2015-06-04 199 views
1

我想建立一個對象(角度),所以它看起來像這樣PHP stdClass的/對象建立

user:{ 
     {education: 
       {high school:'some school'}, 
       {faculty:'faculty of science'} 
     }, 
     {skills: 
       {skill1:'sk1'}, 
       {skill2:'sk2'} 
     } 
} 

,這是我的PHP和MySQL查詢:

$testArr = array(); 
    $user = new stdClass(); 
    $params = DB::select(DB::raw("SELECT param.*, sys_param_values.*,param_value.*,type_user.*, 
             param.name AS paramName, 
             doc_param.name AS docParamName 
             FROM param 
             LEFT JOIN doc_param ON param.doc_param_id = doc_param.id 
             LEFT JOIN sys_param_values ON param.id = sys_param_values.param_id 
             LEFT JOIN param_value ON sys_param_values.value_ref = param_value.id 
             LEFT JOIN type_user ON sys_param_values.ref_user_id = type_user.id")); 

查詢結果:

"params":[{"id":21,"name":"faculty","type_id":5,"doc_param_id":14,"created_at":"2015-05-17 14:13:12","updated_at":"2015-06-04 08:19:43","doc_type":12,"ref_user_id":21,"param_id":48,"iteration":null,"value_short":null,"value_long":null,"value_ref":74,"value":"some High","type":"tech-admin","email":"x[email protected]","password":"$2y$10$6L8voJ3DgZuADHZLaBh4jei\/U.svVdcN4B02XFc9mF\/p8m5RpfJtG","password_new":null,"first_name":"jon","last_name":"snow","street_1":"shiv","street_2":"tey","city":"123456","state":"aa","zipcode":"47252","country":"usa","phone_1":"123456","phone_2":"123456","mobile":"123456789","date_of_birth":"2015-05-18 11:25:42","registration":"0000-00-00 00:00:00","last_login":"2015-05-20 09:14:52","send_newsletters":1,"send_notifications":1,"remember_token":"dtlimLNZBWdCxcqKR7NdDblMiafkZOxywN4jjUac53v7NI4e1t6eokJXdsoy","paramName":"faculty","docParamName":"education"} 

後查詢女巫是好的,我的循環:

foreach($params as $k=>$v) { 
     $paramName = $v->paramName; 
     $value = $v->value; 
     $testArr[$v->docParamName] = array(); 
     $testArr[$v->docParamName][$paramName] = $v->value; 
    } 

,其結果是:

"test":{ 
     "education": 
        {"high_school":"some High"}, 
     "skills": 
        {"skill_1":"skill_1 Value"}, 
     "experience": 
        {"xp_1":"xp1 value"} 
     } 

的事情是,我有更多,如果這些參數例如「skill_2」和那些想在「技能」的對象去「skill_3」。 但這個循環安良得到最後一個參數..

我在哪裏我也這麼認爲,所有的技能去技能對象等指定密鑰或東西..

回答

1

您需要定義像這一點: -

foreach($params as $k=>$v) { 
     $paramName = $v->paramName; 
     $value = $v->value; 
     // $testArr[$v->docParamName] = array(); // comment the line 
     $testArr[$v->docParamName][$paramName] = $v->value; 
    } 

注: - 行註釋掉,因爲你之前已經foreach loop.thanks

+0

它已被定義爲數組:但你應該如果它不是之前只初始化數組初始化。只是在查詢上方,只是在循環之上,你看到的所有內容都在同一個函數 – dor

+0

哇..所以我沒有評論該行..它的工作原理..awsome!謝謝 – dor

+0

很高興聽到您的問題已解決,並感謝您進行標記和投票。謝謝。 –

1

定義$testArr爲數組您是重新initi在每次迭代alizing您的子對象:

$testArr[$v->docParamName] = array(); // <- By this, you remove all previously 
             // assigned values 
$testArr[$v->docParamName][$paramName] = $v->value; 

附加元素,前初始化數組的是一個好主意,因爲它會以其他方式觸發警告,當您嘗試添加到一個未初始化數組。

if (!array_key_exists($v->docParamName, $testArr)) { 
    $testArr[$v->docParamName] = array(); 
} 
$testArr[$v->docParamName][$paramName] = $v->value;