在子数组的PHP数组中,如何获取所有列名称

时间:2017-10-14 12:38:14

标签: php

当我有以下格式的数组时:

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

如何获取所有列名?

因此,对于上述情况,它应该检索" col1"," col2"和" col3"。棘手的部分是某些行有一些列的数据而不是其他行。

4 个答案:

答案 0 :(得分:1)

通过使用递归函数,我们可以获得数组中的所有键值。希望它会有所帮助。

<script>
  var food_menu = '[{"cat":"Burgers","name":"Hamburger classic","text":"200g of meat with chips","price":"9,50"},{"cat":"Burgers","name":"Hamburger chili","text":"250g of meat with chips + drink (orange juice 0,5l)","price":"12,50"},{"cat":"Burgers","name":"Chickenburger","text":"250g of meat with chips + drink (orange juice 0,5l)","price":"10,50"},{"cat":"Burgers","name":"Chickenburger chili","text":"250g of meat with chips + drink (orange juice 0,5l)","price":"14,50"},{"cat":"Steaks","name":"Baconburger","text":"300g of meat with chips","price":"16,50"},{"cat":"Steaks","name":"Hotburger","text":"300g of meat with chips + drink (orange juice 0,5l)","price":"18,50"},{"cat":"Maxs","name":"Hotburger max","text":"450g of meat with chips","price":"21,50"},{"cat":"Maxs","name":"Chickenburger max","text":"450g of meat with chips","price":"15,50"}]';

</script>

<body>
  <main>
      <cart></cart>
      <food :menu="menu"></food>
  </main>
  <script src="https://unpkg.com/vue"></script>
</body>

答案 1 :(得分:0)

  

因此,对于上述内容,它应该检索“col1”,“col2”和“col3”。该   棘手的部分是某些行有一些列的数据,但没有   其他

下面给出了一个跨数组的唯一键

参考:

call_user_func_array() - 使用参数数组调用回调

array_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

答案 2 :(得分: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

答案 3 :(得分: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 );
?>