繁体   English   中英

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

[英]2d multidimensional array to 1d array in php

只是想知道是否有人在 php.ini 中将一个 2 暗数组转换为一个暗数组。 我还没有在 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;
}

试试这个:

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 => 1D 数组转换的情况下, somethingarray 我们在一个数组中有很多它们,但我们只想要其中一个。

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)
}

你的意思是这样?

$array = array(array('green', 'yellow', 'orange'), array('blue', 'black', 'white'));
$newarray = array();
foreach (array_values($array) as $value){
   $newarray[] = $value; 
}

这取决于您需要什么,但是如果您想将 2d 数组减少到完全填充 2d 平面的 1d 曲线,您可能正在寻找空间索引或空间填充曲线。 有一些著名的和不那么出名的曲线,如 z 曲线、希尔伯特曲线、皮亚诺曲线或摩尔曲线。 你可以用 L 系统写出这样的曲线。

矩形二维数组的解决方案确实很简单,但我遇到了问题。 我的二维数组由不同长度的一维数组组成:

$myArray = [
    [1, 2, 3, 4],
    [5, 6, 7],
    [8, 9]
];

我想出了更通用的解决方案来将任何 2D 数组转换为 1D:

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM