當我有以下格式的數組:子陣列的一個PHP數組,一個人如何獲取所有列名
array(
// row 1
array("col1"=>"data1row1", "col3"=>"data3row1"),
// row 2
array("col2"=>"data2row2", "col3"=>"data3row2"),
)
我如何獲得所有的列名?
因此,對於上述情況,應該檢索「col1」,「col2」和「col3」。棘手的部分是有些行有一些列的數據,但沒有其他列。
當我有以下格式的數組:子陣列的一個PHP數組,一個人如何獲取所有列名
array(
// row 1
array("col1"=>"data1row1", "col3"=>"data3row1"),
// row 2
array("col2"=>"data2row2", "col3"=>"data3row2"),
)
我如何獲得所有的列名?
因此,對於上述情況,應該檢索「col1」,「col2」和「col3」。棘手的部分是有些行有一些列的數據,但沒有其他列。
通過使用遞歸函數,我們可以獲取數組中的所有鍵值。希望它會有所幫助。
function array_keys_multi(array $array)
{
$keys = array();
foreach ($array as $key => $value) {
$keys[] = $key;
if (is_array($value)) {
$keys = array_merge($keys,
array_keys_multi($value));
}
}
return $keys;
}
因此,對於上述情況,應檢索所有 「col1」, 「col2上」 和 「COL3」。棘手的部分是,有些行有一些列的數據,但不包括其他的數據組。
下面一個讓您在陣列的唯一鍵
編號:
call_user_func_array()
- 調用回調與一組參數
array_merge()
-MERGE一個或多個陣列
array_keys()
- 返回數組中所有鍵或鍵的子集
print_r(
array_keys(
call_user_func_array('array_merge', $array)) );
要獲取密鑰作爲逗號分隔的字符串
// gives : col1,col3,col2
echo implode(',', array_keys(call_user_func_array('array_merge', $array)));
/* For expected output, we have to sort it */
$merged = array_keys(call_user_func_array('array_merge', $array));
sort($merged);
// gives : col1,col2,col3
echo implode(',', $merged);
說明:
array_merge
:用於合併一個或多個陣列的元件一起,使得一個的值附加到前一個的結尾。它返回結果數組。 如果輸入數組具有相同的字符串鍵,則該鍵的後面的值將覆蓋前一個。因此,沒有必要的array_unique()
因爲你得到了與字符串作爲索引的數組,很會照顧重複測試結果:
$ cat test.php
<?php
$array = array(
// row 1
array("col1"=>"data1row1", "col3"=>"data3row1"),
// row 2
array("col2"=>"data2row2", "col3"=>"data3row2"),
);
print_r( array_keys(call_user_func_array('array_merge', $array)) );
echo implode(',', array_keys(call_user_func_array('array_merge', $array))).PHP_EOL;
/* For expected output, we have to sort it */
$merged = array_keys(call_user_func_array('array_merge', $array));
sort($merged);
// gives : col1,col2,col3
echo implode(',', $merged);
?>
$ php test.php
Array
(
[0] => col1
[1] => col3
[2] => col2
)
col1,col3,col2
col1,col2,col3
通過簡單的foreach
並通過檢查is_array
你做到這一點像
<?php
$arr = [
["col1"=>"data1row1", "col3"=>"data3row1"],
["col2"=>"data2row2", "col3"=>"data3row2"],
"col4"=>"datarow4"
];
$new = array();
foreach($arr as $key1=>$value1){
if(is_array($value1)){
foreach($value1 as $key2=>$value2){
$new[] = $key2;
}
}else{
$new[] = $key1;
}
}
$new = array_unique($new);
sort($new);
print_r($new);
?>
如果你只是想有一個獨特價值鍵:
<?php
//sample data
$array = array(array("col"=>123,"vol"=>567) , array("vol"=>876, "rol"=>321));
//array of keys
$keys = array();
foreach($array as $row) {
if(is_array($row)) {
foreach($row as $key => $cell) {
//check if the column has data
if(isset($cell) && !empty($cell)) {
$keys[$key] = $key;
}
}
}
}
var_dump($keys);
?>
你爲什麼不乾脆遍歷數組 – Tarun
@Tarun做ü意味着在每個子陣列array_keys過來,然後array_unique?如果有很多很多的子陣列呢?說10000?有更快的方法嗎? – humanitiesclinic
@humanitiesclinic如何有更快的方式?無論如何,你需要經歷所有的陣列。但是,如果您在數據庫的某個位置擁有此數據,則應直接從此處進行查詢。 – eis