PHP:使用foreach修改multidimensional array的值

我有一个使用Yii2的项目,在我的项目中用户可以上传一个excel文件,系统读取数据并将其设置成一个新的二维数组,例如:

Example.xls

在这里输入图像说明

这是我在我的控制器中使用的代码:

for ($row = 1; $row <= $highestRow; ++$row) { $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE); if (!is_null($rowData[0][0])) { foreach ($rowData as $key => $value) { foreach ($value as $vKey => $vValue) { $tempArrayData[] = $vKey . "_" . $vValue; } } $arrayData[] = $tempArrayData; } } echo '<pre>'; print_r($arrayData); echo '</pre>'; die(); 

我想添加"$key_"作为每个数组值的两个首字符。 所以我使用foreach来做到这一点, 结果是

 Array ( [0] => Array ( [0] => 0_first_name [1] => 1_last_name [2] => 2_age [3] => 3_sex ) [1] => Array ( [0] => 0_first_name [1] => 1_last_name [2] => 2_age [3] => 3_sex [4] => 0_Archie [5] => 1_Will [6] => 2_21 [7] => 3_Male ) [2] => Array ( [0] => 0_first_name [1] => 1_last_name [2] => 2_age [3] => 3_sex [4] => 0_Archie [5] => 1_Will [6] => 2_21 [7] => 3_Male [8] => 0_Vani [9] => 1_Priscillia [10] => 2_21 [11] => 3_Female ) ) 

但是这不是我所期望的,在上面的数组数组总是从Excel数据的第一列开始。 其实我需要这样的结果:

 Array ( [0] => Array ( [0] => 0_first_name [1] => 1_last_name [2] => 2_age [3] => 3_sex ) [1] => Array ( [0] => 0_Archie [1] => 1_Will [2] => 2_21 [3] => 3_Male ) [2] => Array ( [0] => 0_Vani [1] => 1_Priscillia [2] => 2_21 [3] => 3_Female ) ) 

这是我需要的例子结果,任何人都知道如何得到像上面的结果? 或者我怎样才能修改我的代码,所以我可以得到我期望的结果。 谢谢。

编辑

如果我在foreach ($rowData as $key => $value) {删除这个foreach ($value as $vKey => $vValue) {print_r($value) foreach ($rowData as $key => $value) { ,结果如下所示:

 Array ( [0] => first_name [1] => last_name [2] => age [3] => sex ) Array ( [0] => Archie [1] => Will [2] => 21 [3] => Male ) Array ( [0] => Vani [1] => Priscillia [2] => 21 [3] => Female ) 

最终数组结果

 Array ( [0] => Array ( [0] => Array ( [0] => 0_first_name [1] => 1_last_name [2] => 2_age [3] => 3_sex ) ) ) [1] => Array ( [0] => Array ( [0] => 0_Archie [1] => 1_Will [2] => 2_21 [3] => 3_Male ) ) [2] => Array ( [0] => Array ( [0] => 0_Vani [1] => 1_Priscillia [2] => 2_21 [3] => 3_Female ) ) ) 

解决这个案例的最终代码:

  $arrayData = []; for($row = 1; $row <= $highestRow; ++$row) { $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE); $arrayData[] = array_map(function($values) { if (!is_null($rowData[0][0])) { $tempArrayData = []; foreach($values as $key => $value) { $tempArrayData[] = $key . '_' . $value; } return $tempArrayData; }, $rowData); } } 

UPDATE

项目有更新要求,项目已成功创build结果为上述“ 最终结果” 但是现在数组需要修改,预期的结果是这样的

 Array ( [0] => Array ( [0] => Array ( [0] => 0_first_name [1] => 1_last_name [2] => 2_age [3] => 3_sex ) ) [1] => Array ( [0] => Array ( [0] => 0_Archie [1] => 1_Will [2] => 2_21 [3] => 3_Male ) ) [2] => Array ( [0] => Array ( [0] => 0_Vani [1] => 1_Priscillia [2] => 2_21 [3] => 3_Female ) ) ) 

有谁知道如何解决这个问题? 谢谢

首先做这个

 $rowData = []; for($row = 1; $row <= $highestRow; ++$row) { $rowData[] = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE); } 

现在你的$rowData应该等于

 $rowData = [ ["first_name", "last_name", "age", "sex"], ["Archie", "Will", "21", "Male"], ["Vani", "Priscillia", "21", "Female"] ]; 

你可以简单地尝试这样做

 $arrayData[] = array_map(function($values) { $tempArrayData = []; foreach($values as $key => $value) { $tempArrayData[] = $key . '_' . $value; } return $tempArrayData; }, $rowData); 

最后的代码

 $arrayData = []; for($row = 1; $row <= $highestRow; ++$row) { $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE); $arrayData[][0] = array_map(function($values) { $tempArrayData = []; foreach($values as $key => $value) { $tempArrayData[] = $key . '_' . $value; } return $tempArrayData; }, $rowData); } 

最终产出

 array:3 [▼ 0 => array:4 [▼ 0 => "0_first_name" 1 => "1_last_name" 2 => "2_age" 3 => "3_sex" ] 1 => array:4 [▼ 0 => "0_Archie" 1 => "1_Will" 2 => "2_21" 3 => "3_Male" ] 2 => array:4 [▼ 0 => "0_Vani" 1 => "1_Priscillia" 2 => "2_21" 3 => "3_Female" ] ]