Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将两个值不等的数组合并到键值对中_Php_Arrays - Fatal编程技术网

Php 将两个值不等的数组合并到键值对中

Php 将两个值不等的数组合并到键值对中,php,arrays,Php,Arrays,我有两个基本上是HTML表数据的数组。我想把它们合并成一个。其中一个数组,$headers,总是比第二个数组$data小 例如: $headers = array("Name","Phone","E-Mail"); $data = array("Bob", "Phone1", "E-Mail1", "Mike", "Phone2", "Email2", "Jim", "Phone3", "E-Mail3"); 我想要的是以某种方式循环这两个数组,并将它们合并为一个具有键值对的数组,最终得到以

我有两个基本上是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";
基本上,将它们拆分为按表中的行排序的多维数组


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

您可以通过一点数学来设置正确的键

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

你可以通过一点数学来设置正确的关键点

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

您可以使用、和的组合来完成此操作:

结果:

数组
( 
[0]=>阵列
( 
[姓名]=>鲍勃
[电话]=>电话1
[电子邮件]=>电子邮件1
) 
[1] =>阵列
( 
[姓名]=>迈克
[电话]=>电话2
[电子邮件]=>电子邮件2
) 
[2] =>阵列
( 
[姓名]=>吉姆
[电话]=>电话3
[电子邮件]=>电子邮件3
) 
) 

您可以使用、和的组合:

结果:

数组
( 
[0]=>阵列
( 
[姓名]=>鲍勃
[电话]=>电话1
[电子邮件]=>电子邮件1
) 
[1] =>阵列
( 
[姓名]=>迈克
[电话]=>电话2
[电子邮件]=>电子邮件2
) 
[2] =>阵列
( 
[姓名]=>吉姆
[电话]=>电话3
[电子邮件]=>电子邮件3
) 
) 

我就是这样解决的,只使用
数组块

$values = array_chunk($data, count($headers));
这几乎产生了我想要的结果,除了键是headers数组的索引,而不是header本身。因为我仍然引用headers数组,所以当我想循环时,我是这样做的:

foreach ($values[$key] as $key => $value)
{
      $value; // the data
      $headers[$key]; // the header (String, not index)
}
当我想在数组中使用这些值时,我提取如下:

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

我就是这样解决的,只使用
array\u chunks

$values = array_chunk($data, count($headers));
这几乎产生了我想要的结果,除了键是headers数组的索引,而不是header本身。因为我仍然引用headers数组,所以当我想循环时,我是这样做的:

foreach ($values[$key] as $key => $value)
{
      $value; // the data
      $headers[$key]; // the header (String, not index)
}
当我想在数组中使用这些值时,我提取如下:

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

array\u combine
要求数组中的值数量相等。我现在正在查看
array\u chunk
,稍后会回复您……索引确实从1开始,而不是从0开始?@Don'tPanic no.Typo。无论如何,我删除了这个问题不需要的内容。我认为您不希望在每个赋值中使用
[]
array\u combine
要求数组中的值数量相等。我现在正在查看
array\u chunk
,稍后会回复您……索引确实从1开始,而不是从0开始?@Don'tPanic no.Typo。不管怎样,我删除了这个问题不需要的内容。我认为你不希望在每个作业中都使用
[]