php stdClass/object build



我想建立一个对象(为angular),所以它看起来像这样

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":"xxxxxxx8@gmail.com","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"}

查询结束后,I循环:

    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"one_answers"skill_3",应该去"技能"对象。但是这个循环只获取最后一个参数。

我应该在哪里指定一个键或其他东西,以便所有的技能都进入技能对象等等。

您需要这样定义:-

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

注意:-该行被注释,因为您已经将$testArr定义为foreach循环之前的数组。谢谢

在每次迭代中重新初始化子对象:

$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;

相关内容

最新更新