只是想知道是否有人在php中将2 dim数组转换为1 dim数组。我还没有在php中遇到一个明确的解释。
如果你在这里从Query中获取值,这可能对你有帮助你可以使用PHP 5.5+支持的数组函数
$myfield_arr = array_column($query_result, 'myfield_name');
对循环说再见!
试试这个:
function array_2d_to_1d ($input_array) {
$output_array = array();
for ($i = 0; $i < count($input_array); $i++) {
for ($j = 0; $j < count($input_array[$i]); $j++) {
$output_array[] = $input_array[$i][$j];
}
}
return $output_array;
}
这取决于你需要什么,但如果你想将2d数组减少到完全填充2d平面的1d曲线,你可能会寻找一个空间索引或空间填充曲线。有一些著名的和不太为人所知的,比如z曲线,希尔伯特曲线,皮亚诺曲线和摩尔曲线。你可以用l系写出这样的曲线
试试这个:
function array_to1d($a) {
$out = array();
foreach ($a as $b) {
foreach ($b as $c) {
if (isset($c)) {
$out[] = $c;
}
}
}
return $out;
}
请注意,它包含一个测试,以查看值是否设置(非空)。一个由行长度不等的数组转换而成的数组在某些单元格中会有空值,如果您试图线性化这样的数组,这个检查可能会很有帮助。
你的第一个想法应该是array_reduce()
当你有很多的东西在一个数组,你只是想要一个的东西在某种程度上代表他们所有的。
从PHP文档:
array_reduce -使用回调函数
迭代地将数组减少到单个值
在2D =>一维数组转换时,某物是数组;数组中有很多元素,但我们只想让其中一个单独存在。
function array2dTo1d($array2d)
{
return array_reduce($array2d, function($carry, $array) {
return array_merge($carry, $array);
}, []);
}
var_dump(array2dTo1d(
[
[23423, 5454, 567],
[4565, 687],
]
));
结果:array(5) {
[0] =>
int(23423)
[1] =>
int(5454)
[2] =>
int(567)
[3] =>
int(4565)
[4] =>
int(687)
}
矩形2D数组的解决方案确实很简单,但我有一个问题。我的2d数组由不同长度的1D数组组成:
$myArray = [
[1, 2, 3, 4],
[5, 6, 7],
[8, 9]
];
我想出了一个更广义的解决方案,可以把任何二维数组变成一维:
function array2DTo1D($arr2D) {
$i = 0; $j = 0;
$arr1D = [];
while (isset($arr2D[$i][0])) {
while (isset($arr2D[$i][$j])) {
$arr1D[] = $arr2D[$i][$j];
$j++;
}
$i++; $j = 0;
}
return $arr1D;
}
在PHP 5.3之后有一个新的函数叫做arrray_walk_recursive
$data = [1,2,[3,4],5,[6,7,8],9];
$output = [];
array_walk_recursive($data, function($val) use (&$output) {
$output[] = $val;
});
注意$output
是通过引用
$output
将导致[1,2,3,4,5,6,7,8,9]