我想将几个数组合并为一个,它们是具有未知数量元素的表单帖子的结果,例如:
$ids = [53,54,55];
$names = ['fire','water','earth'];
$temps = [500,10,5];
我想要的是创建一个函数,将这些数组作为输入并生成单个输出,如
$elements = [['id'=>53,'name'=>'fire','temp'=>500] , ['id'=>54,'name'=>'water','temp'=>500] , ['id'=>55,'name'=>'earth','temp'=>500]]
我提出了以下解决方案:
function atg($array) {
$result = array();
for ($i=0;$i<count(reset($array));$i++) {
$newAr = array();
foreach($array as $index => $val) {
$newAr[$index] = $array[$index][$i];
}
$result[]=$newAr;
}
return $result;
}
可以像
一样调用$elements = atg(['id' => $ids, 'name' => $names, 'temp' => $temps]);
它产生正确的输出。对我来说,它看起来有点过于复杂,我确信这是PHP中表单帖子的常见问题,将每个项目的单独字段组合成单个数组。什么是更好的解决方案?
答案 0 :(得分:2)
您可以使用array_map()
一次遍历所有3个数组。在那里,您可以返回新数组,其值为3个数组中的每一个,例如
$result = array_map(function($id, $name, $temp){
return ["id" => $id, "name" => $name, "temp" => $temp];
}, $ids, $names, $temps);
答案 1 :(得分:0)
使用以下代码: -
foreach ($data as $key=>$value) {
$data[$key] = stripslashes($value);
}
输出: -
$ids = [53,54,55];
$names = ['fire','water','earth'];
$temps = [500,10,5];
$result = [];
foreach($ids as $k=>$id){
$result[$k]['id'] = $id;
$result[$k]['name'] =$names[$k];
$result[$k]['temp'] = $temps[0];
}
echo '<pre>'; print_r($result);
答案 2 :(得分:0)
如果您对破坏性解决方案没问题,那么array_shift可以解决这个问题:
DECLARE @VAL NVARCHAR(MAX) = N'AAAA12345ABCD9876=='
SELECT SUBSTRING(@VAL,PATINDEX('%[^A]%',@VAL), LEN(@VAL))
----------------
12345ABCD9876==
如果你想创建一个函数,使用与你的例子相同的参数,解决方案可能是
$elements = array();
while (!empty($ids)) {
$elements[] = array(
'id' => array_shift($ids),
'name' => array_shift($names),
'temp' => array_shift($temps),
);
}
答案 3 :(得分:-1)
$result[$ids]['name'] = $names[0];
$result[$ids]['temp'] = $temps[0]