php中的二维多维数组到一维数组



只是想知道是否有人在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]

相关内容

  • 没有找到相关文章

最新更新