Сгладьте массив массивов и примените суффиксы к ключам, чтобы предотвратить потерю данных.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Сгладьте массив массивов и примените суффиксы к ключам, чтобы предотвратить потерю данных.

Сообщение Anonymous »

Мне требуется, чтобы ключи массива сохранялись с добавлением числа к ключу, чтобы сделать его уникальным при выравнивании массива.

Пример ввода:

Код: Выделить всё

$array = array(
array("name"=>"bob", "age"=>32, "third_param"=>"something"),
array("name"=>"ted", "age"=>57, "third_param"=>"something else"),
array("name"=>"ned", "age"=>103, "third_param"=>"another something"),
);
Обязательный вывод:

Код: Выделить всё

$array = array(
"name-1"=>"bob",
"age-1"=>32,
"third_param-1"=>"something",
"name-2"=>"ted",
"age-2"=>57,
"third_param-2"=>"something else",
"name-3"=>"ned",
"age-3"=>103,
"third_param-3"=>"another something"
);
Мне удалось понять, как это сделать, но мое решение оказалось медленным и запутанным. Должен быть лучший способ.

Вот моя текущая функция:

Код: Выделить всё

function flatten_array($array, $flat = array()) {
foreach($array as $k=>$v){
$k = strval($k);
if(!is_array($v)){
$i = 0;
while(true){
$i++;
$key = $k."-".strval($i);
if(!isset($flat[$key])) break;
}
$flat[$key] = $v;
}else{
$flat = flatten_array($v, $flat);
}
}
return $flat;
}
Вот пример использования: http://3v4l.org/6QVj0/
(Нажмите кнопку «Выполнить», а затем посмотрите вкладку «Производительность».

Это занимает много времени и у меня истекло время ожидания при тестировании на реальных данных, однако это дает нужный мне результат. Что я могу с этим сделать, чтобы сделать это быстрее и не занимать слишком много времени? много памяти?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»