PHP将多个数组合并为一个

时间:2016-03-03 10:47:35

标签: php arrays multidimensional-array

我想将几个数组合并为一个,它们是具有未知数量元素的表单帖子的结果,例如:

$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中表单帖子的常见问题,将每个项目的单独字段组合成单个数组。什么是更好的解决方案?

4 个答案:

答案 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]