如何制作一个带有参数数组的PHP函数


How to make a PHP function with array of arguments

嗨,我是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
);

如果我理解正确,这就是你的函数应该是什么样子的:

函数insertSQL(数组$sqlData){在此处提取$sqlData变量的值。}

使用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语句所需的字段

创建一个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