2015-06-04 125 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;