Я хотел бы сгладить или каким-либо другим способом добиться желаемой структуры массива.
в данный момент мой массив выглядит так:
$list = array(
'ind' => array(
'messagetype' => 'Alert',
'visibility' => 'Public',
'info' => array(
0 => array(
'urgency' => 'Urgent',
'params' => array(
0 => array(
'Name' => 'display',
'value' => '3; top',
),
1 => array(
'Name' => 'level',
'value' => '1; blue',
),
),
'area' => array(
'ard' => 'Bob',
'code' => array(
0 => array(
'Name' => 'Badge',
'value' => 'GSSD154',
),
),
),
),
1 => array(
'urgency' => 'Minor',
'params' => array(
0 => array(
'Name' => 'display',
'value' => '1; left',
),
1 => array(
'Name' => 'level',
'value' => '1; red',
),
),
'area' => array(
'ard' => 'Bob',
'code' => array(
0 => array(
'Name' => 'Badge',
'value' => 'GBECS23',
),
),
),
),
),
),
);
Я хотел бы получить его просто сглаживая таким образом или каким-либо другим методом, чтобы получить такой вид вывода, который в основном аналогичен сглаживанию функций, поэтому в основном просто перемещает дочерние элементы на один уровень и переименовывает их с помощью «.» dots.
$list = array(
'ind' => array(
'messagetype' => 'Alert',
'visibility' => 'Public',
'info' => array(
0 => array(
'urgency' => 'Urgent',
'params.0.Name' => 'display',
'params.0.value' => '3; top',
'params.1.Name' => 'level',
'params.1.value' => '1; blue',
'area.ard' => 'Bob',
'area.code.0.Name' => 'Badge',
'area.code.0.Value' => 'GSSD154',
),
1 => array(
'urgency' => 'Minor',
'params.0.Name' => 'display',
'params.0.value' => '1; left',
'params.1.Name' => 'level',
'params.1.value' => '1; red',
'area.ard' => 'Bob',
'area.code.0.Name' => 'Badge',
'area.code.0.Value' => 'GBECS23',
),
),
),
);
?>
Мне нужно сохранить ключи info => 0, ключи, содержащие параметры => Name должен содержать некоторый идентификатор, поэтому в данном случае проще всего сохранить ключ, который есть почти во всех случаи [0] [1], но в некоторых [0] [1] [2]. Где находится ключ, для меня это не имеет большого значения.
Я перепробовал все, что смог найти в inte rnet, но я просто не мог найти хороший эффект, чтобы соответствовать этому.
со следующим кодом:
function makeNonNestedRecursive(array &$out, $key, array $in) {
foreach ($in as $k => $v) {
if (is_array($v)) {
makeNonNestedRecursive($out, $key . $k . '.', $v);
} else {
$out[$key . $k] = $v;
}
}
}
function makeNonNested(array $in) {
$out = array();
makeNonNestedRecursive($out, '', $in);
return $out;
}
//$fooCompressed = makeNonNested($list);
echo "<pre>";
print_r($list);
Вывод
Array
(
[ind.messagetype] => Alert
[ind.visibility] => Public
[ind.info.0.urgency] => Urgent
[ind.info.0.params.0.Name] => display
[ind.info.0.params.0.value] => 3; top
[ind.info.0.params.1.Name] => level
[ind.info.0.params.1.value] => 1; blue
[ind.info.0.area.ard] => Bob
[ind.info.0.area.code.0.Name] => Badge
[ind.info.0.area.code.0.value] => GSSD154
[ind.info.1.urgency] => Minor
[ind.info.1.params.0.Name] => display
[ind.info.1.params.0.value] => 1; left
[ind.info.1.params.1.Name] => level
[ind.info.1.params.1.value] => 1; red
[ind.info.1.area.ard] => Bob
[ind.info.1.area.code.0.Name] => Badge
[ind.info.1.area.code.0.value] => GBECS23
)
Мне просто нужно, чтобы он не обрабатывал информацию [num] и сохранял это значение для дальнейших операций.
Спасибо за помощь в пересылке.