首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 多維陣列過濾實戰:二維/三維陣列移除空值、轉換維度完整代碼範例

     編輯:PHP 相關知識

PHP 多維陣列過濾實戰

實務開發常需清理多維陣列中的空值,或將三維陣列扁平化為二維。本文提供 array_map/array_filter/array_walk 組合拳與 foreach 兩種風格的完整代碼。

場景一:二維/三維陣列移除空值

<?php
// 二維陣列
$arr = [[,,,,], [,,,,]];

// 三維陣列(帶鍵名)
$arr = [
    'list' => [[,,,], [,,,], [,,,]]
];

// 方法 1:array_map + array_filter(函數式風格)
$res = array_map(function($arr) {
    return array_filter($arr, function($v) {
        return $v !== '';
    });
}, $arr);

// 方法 2:過濾特定值(如空字串、null)
$res = array_map(function($val) {
    return array_filter($val, function($v) {
        return !in_array('', $v);
    });
}, $arr);

// 方法 3:array_walk 保留鍵名
$res = [];
array_walk($arr, function($val, $key) use(&$res) {
    $res[$key] = array_filter($val, function($v) {
        return !in_array('', $v);
    });
});

var_dump($res);

場景二:三維陣列轉二維陣列

<?php
$result = [
    0 => [0 => ['bid'=>41, 'brealname'=>'we教官', 'cid'=>41, 'crealname'=>'we教官']],
    1 => [0 => ['bid'=>6, 'brealname'=>'虎子', 'cid'=>19, 'crealname'=>'張魚']]
];

print_r($result);  // 原始結構

// 方法 1:foreach 直接取第一層元素
foreach ($result as $key => $v) {
    $new_arr[] = $v[0];
}
print_r($new_arr);

// 方法 2:雙層 foreach 扁平化
$arr2 = [];
foreach ($result as $value) {
    foreach ($value as $v) {
        $arr2[] = $v;
    }
}
unset($result, $value, $v);
print_r($arr2);

關鍵函數對比

函數特點適用場景
array_map保留索引結構,回傳新陣列統一轉換每個子陣列
array_filter移除符合條件元素,重置數字索引清理空值/特定值
array_walk可修改原陣列/保留鍵名,需引用參數需保留關聯鍵名
foreach直觀可控,效能最佳複雜邏輯、多層嵌套

最佳實踐建議

  • 簡單過濾用 array_filter 匿名函數
  • 需保留鍵名結構用 array_walk + use(&$res)
  • 維度轉換優先 foreach,可讀性與效能兼備
  • 大量資料處理注意記憶體,考慮 Generator 分批處理

掌握這些組合招,多維陣列清洗轉換不再是難題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved