1. 程式人生 > 實用技巧 >PHP 將二維陣列中某列值作為陣列的鍵名 -- 超實用

PHP 將二維陣列中某列值作為陣列的鍵名 -- 超實用

有時候,想通過陣列的中某欄位值, 然後再在二維陣列中獲取存在該欄位值的陣列;

一般能想到的就是foreach 遍歷比較一下跟該欄位值一樣,就獲取到想要的陣列,如下:

// 測試二維陣列                                         
$arr = array (                                    
  0 =>  array (                                  
    'value' => 1,                          
    'name' => '
test_0', ), 1 => array ( 'value' => 2, 'name' => 'test_1', ), 2 => array (
'value' => 3, 'name' => 'test_2', ), 3 => array ( 'value' => 4, 'name' => 'test_3', ),
4 => array ( 'value' => 5, 'name' => 'test_4', ), );

1. foreach 遍歷大法

比如:根據value = 4, 獲取測試二維陣列中value = 4的陣列

$value = 4;
foreach ($arr as $key => $item) {
   if ($item['value'] == $value) {
       $res = $item;
   }
}

// 結果
array (
 'value' => 4,
  'name' => 'test_3',
)

思考了下,要是不foreach ,直接通過二維陣列的下標獲取到想要的陣列元素那就最好了!那要怎麼樣將二維陣列中的元素的某個欄位值變為二維陣列的下標鍵名呢?

so 了一下 PHP官方文件:https://www.php.net/manual/zh/function.array-column.php,可以看到 有一個array_column()

array_column — 返回陣列中指定的一列

說明
array_column ( array $input , mixed $column_key [, mixed $index_key = null ] ) : array
array_column() 返回input陣列中鍵值為column_key的列, 如果指定了可選引數index_key,那麼input陣列中的這一列的值將作為返回陣列中對應值的鍵。

引數
input
需要取出陣列列的多維陣列。 如果提供的是包含一組物件的陣列,只有 public 屬性會被直接取出。 為了也能取出 privateprotected 屬性,類必須實現 __get() 和 __isset() 魔術方法。

column_key
需要返回值的列,它可以是索引陣列的列索引,或者是關聯陣列的列的鍵,也可以是屬性名。 也可以是NULL,此時將返回整個陣列(配合index_key引數來重置陣列鍵的時候,非常管用)

index_key
作為返回陣列的索引/鍵的列,它可以是該列的整數索引,或者字串鍵值。

就是紅色字型部分說到了,實踐見證奇蹟!!!

2.array_column() 大大法

$tempArr = array_column($arr, null, 'value');

結果:

// 以value欄位為鍵名                                      
array (                                  
  1 => array (                                
    'value' => 1,                        
    'name' => 'test_0',                  
  ),
 2 => array (                                
    'value' => 2,                        
    'name' => 'test_1',                  
  ),                                     
  3 => array (                                
    'value' => 3,                        
    'name' => 'test_2',                  
  ),                                     
  4 => array (                                
    'value' => 4,                        
    'name' => 'test_3',                  
  ),                                     
  5 => array (                                
    'value' => 5,                        
    'name' => 'test_4',                  
  ),                                     
)  
// 以name欄位為鍵名 
$tempArr = array_column($arr, null, 'name');
array (     'test_0' => array (       'value' => 1,       'name' => 'test_0',     ),     'test_1' => array (       'value' => 2,       'name' => 'test_1',     ),     'test_2' => array (       'value' => 3,       'name' => 'test_2',     ),     'test_3' => array (       'value' => 4,       'name' => 'test_3',     ),     'test_4' => array (       'value' => 5,       'name' => 'test_4',     ), )

然後,這樣就可以直接通過 某個欄位值 獲取到二維陣列中 某欄位值 的陣列元素了!超實用!!!

// 實用陣列下標方式獲取想要陣列元素
$res = $tempArr[$value];
// 結果
array (
 'value' => 4,
  'name' => 'test_3',
)

案例:

$pageGoods =  DB::table($orderGoodsTable." as a")
            ->whereIn('order_id', $pageOrderIds)
            ->join($goodsTable." as b", "b.goods_id", "=", "a.goods_id")
            ->select("a.order_id", "b.goods_id", "b.original_img", "b.goods_name")
            ->get()
            ->toArray();
        dd(array_column($pageGoods, null, 'order_id'));