将具有不相等值的两个数组合并到键值对中

时间:2016-04-22 22:33:46

标签: php arrays

我有两个基本上是HTML表数据的数组。我想将它们合并为一个。其中一个数组$headers的数字始终小于第二个数组$data

例如:

$headers = array("Name","Phone","E-Mail");
$data = array("Bob", "Phone1", "E-Mail1", "Mike", "Phone2", "Email2", "Jim",  "Phone3", "E-Mail3");

我想要的是以某种方式循环遍历这两个数组并将它们合并为一个具有键值对的数组,以此结束:

$values[1][Name]       = "Bob";
$values[1][Phone]      = "Phone1";
$values[1][E-Mail]     = "E-Mail1";
$values[2][Name]       = "Mike";
$values[2][Phone]      = "Phone2";
$values[2][E-Mail]     = "E-Mail2";
$values[3][Name]       = "Jim";
$values[3][Phone]      = "Phone3";
$values[3][E-Mail]     = "E-Mail3";

基本上,将它们拆分为多维数组,该数组按表的行排序。

现在,以不同方式存储我的数据不是一种选择。我的问题是如何将它提取到这个新数组中。

3 个答案:

答案 0 :(得分:2)

你可以用一点点数学来设置正确的键。

foreach ($data as $key => $value) {
    $values[(int) $key / 3][$headers[$key % 3]] = $value;
}

答案 1 :(得分:2)

您可以将array_chunkarray_maparray_combine组合使用:

$headers = array("Name","Phone","E-Mail");
$data = array("Bob", "Phone1", "E-Mail1", "Mike", "Phone2", "Email2", "Jim",  "Phone3", "E-Mail3");

$result = array_map( function ( $chunk ) use ( $headers ) { 
  return array_combine( $headers, $chunk );
}, array_chunk( $data, count( $headers ) ) );

结果:

Array 
( 
    [0] => Array 
        ( 
            [Name] => Bob 
            [Phone] => Phone1 
            [E-Mail] => E-Mail1 
        ) 

    [1] => Array 
        ( 
            [Name] => Mike 
            [Phone] => Phone2 
            [E-Mail] => Email2 
        ) 

    [2] => Array 
        ( 
            [Name] => Jim 
            [Phone] => Phone3 
            [E-Mail] => E-Mail3 
        ) 

) 

答案 2 :(得分:0)

这是我解决它的方法,仅使用array_chunks

$values = array_chunk($data, count($headers));

这几乎产生了我想要的东西,除了密钥是头部数组的索引,而不是头部本身。因为我仍然引用了头数组,当我想循环时,我这样做了:

当我想在数组中使用这些值时,我像这样提取:

foreach ($values[$key] as $key => $value)
{
      $value; // the data
      $headers[$key]; // the header (String, not index)
}
相关问题