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