簡體   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