在 PHP 中,有时候会遇到将一个一维数组转换成二维数组的需求。例如,我们可能需要处理一个包含很多数据的一维数组,但是这些数据需要按照某种规则分组,这时候就需要将一维数组转换成二维数组。
接下来我们来介绍一下如何实现一维数组转二维数组的方法。
方法一:使用 for 循环
首先,我们可以使用 for 循环遍历一维数组,然后根据数据分组将数据添加到新的二维数组中。这种方法比较直接,但是需要手动维护一些变量,比较繁琐。
实现代码如下:
<?php // 定义一维数组 $arr = array( array("name" => "Tom", "age" => 18, "sex" => "male"), array("name" => "Jerry", "age" => 20, "sex" => "female"), array("name" => "Lucy", "age" => 21, "sex" => "female"), array("name" => "Bob", "age" => 22, "sex" => "male") ); // 新的二位数组 $newArr = array(); // 遍历一维数组 for ($i = 0; $i < count($arr); $i++) { $sex = $arr[$i]["sex"]; $newArr[$sex][] = $arr[$i]; } // 打印结果 print_r($newArr);
运行结果如下:
Array ( [male] => Array ( [0] => Array ( [name] => Tom [age] => 18 [sex] => male ) [1] => Array ( [name] => Bob [age] => 22 [sex] => male ) ) [female] => Array ( [0] => Array ( [name] => Jerry [age] => 20 [sex] => female ) [1] => Array ( [name] => Lucy [age] => 21 [sex] => female ) ) )
方法二:使用 array_reduce 函数
PHP 中的 array_reduce 函数可以将一个数组通过自定义函数迭代地将其值合并为单一的值。我们可以使用 array_reduce 函数来实现将一维数组转换成二维数组的功能。
实现代码如下:
<?php // 定义一维数组 $arr = array( array("name" => "Tom", "age" => 18, "sex" => "male"), array("name" => "Jerry", "age" => 20, "sex" => "female"), array("name" => "Lucy", "age" => 21, "sex" => "female"), array("name" => "Bob", "age" => 22, "sex" => "male") ); // 使用 array_reduce 函数 $newArr = array_reduce($arr, function($carry, $item) { $sex = $item["sex"]; if (!isset($carry[$sex])) { $carry[$sex] = array(); } $carry[$sex][] = $item; return $carry; }, array()); // 打印结果 print_r($newArr);
运行结果与方法一相同。
方法三:使用 array_map 函数
PHP 中的 array_map 函数可以将一个或多个数组的每个元素传递给回调函数进行处理,然后返回处理后的结果,这种处理方式可以让我们避免使用 for 循环。
实现代码如下:
<?php // 定义一维数组 $arr = array( array("name" => "Tom", "age" => 18, "sex" => "male"), array("name" => "Jerry", "age" => 20, "sex" => "female"), array("name" => "Lucy", "age" => 21, "sex" => "female"), array("name" => "Bob", "age" => 22, "sex" => "male") ); // 使用 array_map 函数 $newArr = array_map(function($item) { $sex = $item["sex"]; return array($sex => $item); }, $arr); // 将处理后的二维数组进行合并 $newArr = call_user_func_array("array_merge", $newArr); // 打印结果 print_r($newArr);
运行结果与方法一、方法二相同。
总结
在本文中,我们介绍了三种将一维数组转换成二维数组的方法,分别是使用 for 循环、array_reduce 函数和 array_map 函数。
这些方法都有一定的优劣点,选择哪种方法也要根据实际情况进行权衡。但总的来说,使用 array_reduce 函数和 array_map 函数更加简洁和优雅。