如何使用参数数组创建PHP函数

时间:2016-05-09 05:20:56

标签: php

您好我是PHP的新手,我通常使用Java,实际上是在这个insertSQL函数中编写多个参数/参数数组的正确方法,因为我必须插入很多SQL对象。谢谢

//Store User into MySQL DB
$res = $db->insertSQL(
    $data[$i]->id,
    $data[$i]->location_id,
    $data[$i]->section_id,
    $data[$i]->inspection_date,
    $data[$i]->photo_entire_path,
    $data[$i]->photo_isolator_path,
    $data[$i]->pole_no,
    $data[$i]->pole_iron,
    $data[$i]->pole_iron,
    $data[$i]->pole_iron);


//Based on inserttion, create JSON response
if($res){
    $b["id"] = $data[$i]->id;
    $b["status"] = 'yes';
    array_push($a,$b);
}else{
    $b["id"] = $data[$i]->id;
    $b["status"] = 'no';
    array_push($a,$b);
}

现在它看起来像这样

$res = $db->insertSQL(
    $data[$i]->id, 
    $data[$i]->location_id, 
    $data[$i]->section_id, 
    $data[$i]->inspection_date, 
    $data[$i]->photo_entire_path, 
    $data[$i]->photo_isolator_path, 
    $data[$i]->pole_no, 
    $data[$i]->pole_iron, 
    $data[$i]->pole_concrete, 
    $data[$i]->pole_wood, 
    $data[$i]->pole_condition_broken, 
    $data[$i]->pole_condition_tilt, 
    $data[$i]->pole_condition_shift, 
    $data[$i]->cros_arm_twist, 
    $data[$i]->cross_arm_rust, 
    $data[$i]->cross_arm_tilt, 
    $data[$i]->arm_tie_repair, 
    $data[$i]->arm_tie_rust, 
    $data[$i]->arm_tie_brace, 
    $data[$i]->isolator_fulcrum_r_leak, 
    $data[$i]->isolator_fulcrum_r_broken, 
    $data[$i]->isolator_fulcrum_s_leak,
    $data[$i]->isolator_fulcrum_s_broken, 
    $data[$i]->isolator_fulcrum_t_leak, 
    $data[$i]->isolator_fulcrum_t_broken, 
    $data[$i]->isolator_pull_r_leak, 
    $data[$i]->isolator_pull_r_broken, 
    $data[$i]->isolator_pull_s_leak, 
    $data[$i]->isolator_pull_s_broken, 
    $data[$i]->isolator_pull_t_leak, 
    $data[$i]->isolator_pull_t_broken, 
    $data[$i]->arrester_r_broken, 
    $data[$i]->arrester_s_broken, 
    $data[$i]->arrester_t_broken, 
    $data[$i]->conductor_r_buyer, 
    $data[$i]->conductor_r_loose, 
    $data[$i]->conductor_s_buyer, 
    $data[$i]->conductor_s_loose,  
    $data[$i]->conductor_t_buyer, 
    $data[$i]->conductor_t_loose, 
    $data[$i]->connector_pg_r_35mm, 
    $data[$i]->connector_pg_r_70mm, 
    $data[$i]->connector_pg_r_150mm, 
    $data[$i]->connector_pg_s_35mm, 
    $data[$i]->connector_pg_s_70mm, 
    $data[$i]->connector_pg_s_150mm, 
    $data[$i]->connector_pg_t_35mm, 
    $data[$i]->connector_pg_t_70mm, 
    $data[$i]->connector_pg_t_150mm, 
    $data[$i]->bending_wire_r, 
    $data[$i]->bending_wire_s, 
    $data[$i]->bending_wire_t, 
    $data[$i]->ultrasonic_r, 
    $data[$i]->ultrasonic_s, 
    $data[$i]->ultrasonic_t, 
    $data[$i]->gws_exist, 
    $data[$i]->gws_not_exist, 
    $data[$i]->tree_exist, 
    $data[$i]->tree_not_exist, 
    $data[$i]->longitude, 
    $data[$i]->latitude, 
    $data[$i]->suggestion, 
    $data[$i]->descr
);

3 个答案:

答案 0 :(得分:0)

如果我理解正确,这就是你的功能应该是这样的:

function insertSQL(Array $ sqlData) {     在这里从$ sqlData变量中提取值。 }

答案 1 :(得分:0)

使用call_user_func_arrayfunc_get_argsjson_encodejson_decode函数(处理参数数组)尝试以下解决方案:

...
$encoded = json_encode($data[$i]);
$fields_arr = json_decode($encoded, true); // to get an array of object properties with values.
// Also you should, probably, check the order of fields
$fields_arr['id'] = false;
$fields_arr = array_filter($fields_arr);  // for removing the 'id' field
$args = ['id' => $data[$i]->id]; // first argument
call_user_func_array(array($db, 'insetSQL'), array_merge($args, $fields_arr)); // it also may require your current Namespace in the first arg
...
// Then, the 'insetSQL' method should process the arguments in the following manner:
function insetSQL($fields = []) {
    $fields = func_get_args();
    $id = $fields[0];
    // adjusting the rest of fields ($fields[1], $fields[2] ...)
    ...

}

虽然,我也建议将初始对象$data[$i]直接传递给insetSQL方法作为参数,并获取sql INSERT语句所需的字段

答案 2 :(得分:0)

创建一个JSON对象为

$named_array = array(
            "longitude" => "12.2"
            "latitude" => "12.2"
);
$named_array = json_encode($named_array);

$ named_array 可以是 字段数组

您可以将 $ named_array 对象作为参数传递给其他函数。

然后使用

$named_array = json_decode($named_array)
echo $named_array->longitude

您可以访问任何键值对作为$ named_array-> latitude