Php 将两个值不等的数组合并到键值对中
我有两个基本上是HTML表数据的数组。我想把它们合并成一个。其中一个数组,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"); 我想要的是以某种方式循环这两个数组,并将它们合并为一个具有键值对的数组,最终得到以
$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。不管怎样,我删除了这个问题不需要的内容。我认为你不希望在每个作业中都使用[]
。