Php 将阵列连接在一起但相互交叉
我有三个这样的数组Php 将阵列连接在一起但相互交叉,php,arrays,csv,Php,Arrays,Csv,我有三个这样的数组 $wages = array("Tom" => "£20", "Mike" => "£5.60", "James" => "12"); $training = array("Tom" => "£2", "James" => "7", "Dean" => "£3.50"); $tax = array("James" => "£1.50", "Kevin" => "£3", "Dean" => "£2"); 每个数组都有每个
$wages = array("Tom" => "£20", "Mike" => "£5.60", "James" => "12");
$training = array("Tom" => "£2", "James" => "7", "Dean" => "£3.50");
$tax = array("James" => "£1.50", "Kevin" => "£3", "Dean" => "£2");
每个数组都有每个员工的工资/培训/税费。我要做的是将它们分开,这样我就可以为每个员工创建一个数组。预期结果的格式为employee=>(工资、培训、税收)
:
我之所以这样做,是因为我想通过CSV(fputcsv
)将结果写入电子表格。现在,我一直在尝试这样重组:
foreach ($employeesList as $employee) {
if (array_key_exists($employee, $wages))
$combined[$employee] = array($employee, $wages[$employee]);
}
}
首先梳理数组,使键和值都相同
$combined=array\u combined($employeesList,$employeesList)代码>
employeesList
仅包含作为值的员工姓名
然后循环此employees数组,查看上面定义的数组中是否存在任何键,如下所示:
foreach ($employeesList as $employee) {
if (array_key_exists($employee, $wages))
$combined[$employee] = array($employee, $wages[$employee]);
}
}
这部分很好用。然后我对税数组执行如下操作:
foreach ($tax as $key => $value) {
if (array_key_exists($key, $combined)) {
array_push($combined[$key], $value);
}
但这在第二次迭代中失败,因为array\u push
在给定字符串时需要一个数组。像上面显示的数组一样,不是每个员工都有每个字段的记录。所以我想知道我怎样才能解决这个问题?和/或是否有其他路线可供选择。感谢您的帮助请先提取所有姓名
$names = array_unique(array_merge(array_keys($wages), array_keys($training), array_keys($tax)));
然后迭代这些名称以生成记录集
$employeeList = [];
foreach ($names AS $name)
$employeeList[$name] = [@$wages[$name] ?: 0, @$training[$name] ?: 0, @$tax[$name] ?: 0];
请注意使用@
。。。执行此操作是因为我们不关心单个值何时丢失;提供了一个默认值
这将产生一个如下所示的集合
> var_dump($employeeList);
array(5) {
["Tom"]=>
array(3) {
[0]=>
string(4) "£20"
[1]=>
string(3) "£2"
[2]=>
int(0)
}
["Mike"]=>
array(3) {
[0]=>
string(6) "£5.60"
[1]=>
int(0)
[2]=>
int(0)
}
["James"]=>
array(3) {
[0]=>
string(2) "12"
[1]=>
string(1) "7"
[2]=>
string(6) "£1.50"
}
["Kevin"]=>
array(3) {
[0]=>
int(0)
[1]=>
int(0)
[2]=>
string(3) "£3"
}
["Dean"]=>
array(3) {
[0]=>
int(0)
[1]=>
string(6) "£3.50"
[2]=>
string(3) "£2"
}
}
为我工作!非常感谢。