一千萬個為什麽

搜索

php:最簡單的方法將索引的二維數組轉換為關聯索引的包含值的二維數組?

我不斷發現自己在數據庫上運行查詢並獲得表示行的多維數組。不幸的是,第一級索引是數字的,這不是很有用。我經常在表中使用帶有標識字符串的表,並希望將生成的多維數組轉換為由該標識列關聯索引的內容。

一個不起眼的自創自定義功能,可以做我想要的:

function identity_associate($data, $identity_column='identity'){
    $res = array();
    foreach($data as $single_row){
        $loop_identity = $single_row[$identity_column];
        $res[$loop_identity] = $single_row;
    }
    return $res;
}

顯然我每次想要這樣做時都可以使用foreach循環,或者每當我將數據傳遞給它時使用該函數為我做這個,但是如果有一個內置的方法用本機php函數來做這件事,我寧願用它來進行修正。我試圖在php文檔中找到適合排序和數組的東西,但找不到任何確切的東西,谷歌也沒什麽幫助。任何人都知道php本地或其他更簡單的東西?

即我想轉換查詢數據庫時獲得的數據...

array(
  array(
    'user_id'=>45,
    'identity'=>'bob',
    'name'=>'Bob'
  ),
  array(
    'user_id'=>51, 
    'identity'=>'tchalvak', 
    'name'=>'TchalVak'
  )
);

更有用的東西

array(
  'bob'=>array(
    'user_id'=>45, 
    'identity'=>'bob', 
    'name'=>'Bob'
  ), 
  'tchalvak'=>array(
    'user_id'=>51, 
    'identity'=>'tchalvak', 
    'name'=>'TchalVak'
  )
);

盡可能優化,因為它是我一直在任何地方使用的東西。

修改</強>

我想指出,我通過調用PDO中的內置函數從數據庫中獲取該格式的數據,並返回相當於第一個數組:

$statement->execute();
return $statement->fetchAll(PDO::FETCH_ASSOC);

例如。調用下面的sql:

$data = query('select name, user_id, identity from users order by identity');

...會在問題的頂部得到第一個數組。

最佳答案

我正在考慮通過應用數組映射 array_unshift()函數來關閉第一個元素,然後將 array_map()返回的數組與原始數組配對 array_combine ()</代碼>。這是一個示例,請記住,只有當identity元素是子數組的第一個元素時,它才會起作用:

<?php
$arrs = array(
            array(
                'identity'=>'bob',
                'user_id'=>45,
                'name'=>'Bob'
            ),
            array(
                'identity'=>'tchalvak',
                'user_id'=>51, 
                'name'=>'TchalVak'
            )
        );

$identites = array_map( 'array_shift', $arrs );
$formatted = array_combine( $identites, $arrs );
print_r( $formatted );
?>

如果身份不是第一個元素,如果有必要,你可以制作一個輔助函數來傳遞給數組映射。

<?php
$arrs = array(
            array(
                'identity'=>'bob',
                'user_id'=>45,
                'name'=>'Bob'
            ),
            array(
                'identity'=>'tchalvak',
                'user_id'=>51, 
                'name'=>'TchalVak'
            )
        );

$identites = array_map( 'array_grab', $arrs );
$formatted = array_combine( $identites, $arrs );
print_r( $formatted );

function array_grab( $array ) { return( $array['identity'] ); }
?>

轉載註明原文: php:最簡單的方法將索引的二維數組轉換為關聯索引的包含值的二維數組?