当我有以下格式的数组时:
array(
// row 1
array("col1"=>"data1row1", "col3"=>"data3row1"),
// row 2
array("col2"=>"data2row2", "col3"=>"data3row2"),
)
如何获取所有列名?
因此,对于上述情况,它应该检索" col1"," col2"和" col3"。棘手的部分是某些行有一些列的数据而不是其他行。
答案 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);
?>
答案 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 );
?>