2017-10-14 80 views
1

當我有以下格式的數組:子陣列的一個PHP數組,一個人如何獲取所有列名

array( 
// row 1 
array("col1"=>"data1row1", "col3"=>"data3row1"), 
// row 2 
array("col2"=>"data2row2", "col3"=>"data3row2"), 
) 

我如何獲得所有的列名?

因此,對於上述情況,應該檢索「col1」,「col2」和「col3」。棘手的部分是有些行有一些列的數據,但沒有其他列。

+0

你爲什麼不乾脆遍歷數組 – Tarun

+0

@Tarun做ü意味着在每個子陣列array_keys過來,然後array_unique?如果有很多很多的子陣列呢?說10000?有更快的方法嗎? – humanitiesclinic

+0

@humanitiesclinic如何有更快的方式?無論如何,你需要經歷所有的陣列。但是,如果您在數據庫的某個位置擁有此數據,則應直接從此處進行查詢。 – eis

回答

1

通過使用遞歸函數,我們可以獲取數組中的所有鍵值。希望它會有所幫助。

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; 
} 
0

因此,對於上述情況,應檢索所有 「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 
0

通過簡單的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); 
?> 

現場演示:https://eval.in/880031

0

如果你只是想有一個獨特價值鍵:

<?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); 
?>