Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Csv - Fatal编程技术网

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"
  }
}

为我工作!非常感谢。