[英]php: simplest way to turn an indexed two-dimensional array into an associatively indexed-by-a-contained-value two-dimensional array?
我不斷發現自己在數據庫上運行查詢並獲得表示行的多維數組。 不幸的是,第一級索引是數字的,這不是很有用。 我經常在表中使用帶有標識字符串的表,並希望將生成的多維數組轉換為由該標識列關聯索引的內容。
一個不起眼的自創自定義功能,可以做我想要的:
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()
的原始數組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的內容。 您可以使用array_map並保存在foreach上,但這並沒有真正節省太多(並且消除了$identify_column
參數)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.