Вам нужно использовать поле / 2 для динамического создания полей в запросах:
query
|> select([x], count(field(x, ^field_name), :distinct))
Пример использования другого синтаксиса запроса для завершения:
from x in query,
select: count(field(x, ^field_name), :distinct)
<?php
// Gets a list of all the 2nd-level keys in the array
function getL2Keys($array)
{
$result = array();
foreach($array as $sub) {
$result = array_merge($result, $sub);
}
return array_keys($result);
}
?>
edit: удалена лишняя функция array_reverse ()
Мое предложение, подобное этот ответ , но быстрее и использование оператор распространения (PHP 5.6 +).
array_merge(...array_values($fields))
, если Вы хотите, чтобы имена перемещения выстроили значения и сбросили ключи к 0.. n просто используют array_keys
на последнем шаге.
array_keys(array_merge(...array_values($fields)))
array_keys(call_user_func_array('array_merge', $a));
Объединить все значения и получить полученные ключи.
foreach($bigArray as $array){
foreach($array as $key=>$value){
echo $key;
}
}
Это должно делать то, что вы хотите.
А что насчет такого:
$your_keys = array_keys($your_array[0]);
Конечно, это с учетом того, что все подмассивы имеют одинаковые ключи; в этом случае вам нужны только ключи первого подмассива (я полагаю, нет необходимости перебирать все подмассивы первого уровня)
И, в качестве сокращенного / упрощенного примера:
$your_array = array(
array(
'action' => 'A',
'id' => 1,
'base' => array('id' => 145),
),
array(
'action' => 'B',
'id' => 2,
'base' => array('id' => 145),
),
array(
'action' => 'C',
'id' => 3,
'base' => array('id' => 145),
)
);
$your_keys = array_keys($your_array[0]);
var_dump($your_keys);
Вы получите:
array
0 => string 'action' (length=6)
1 => string 'id' (length=2)
2 => string 'base' (length=4)
Вы можете использовать implode
, чтобы получить запрошенную строку:
echo implode(', ', $your_keys);
вы получите:
action, id, base
то есть список ключей первого подмассива.
function __getAll2Keys($array_val){
$result = array();
$firstKeys = array_keys($array_val);
for($i=0;$i<count($firstKeys);$i++){
$key = $firstKeys[$i];
$result = array_merge($result,array_keys($array_val[$key]));
}
return $result;
}
попробуйте эту функцию. Он вернется, как вы хотите.