@sashafokin

Как обрезать значения в многомерном массиве?

Привет! У меня есть массив такого вида:
Array
(
    [servers] => Array
        (
            [4] => Array
                (
                    [address] => xxxx
                    [protocol] => 48
                    [hostname] => xxxxx
                    [appid] => 10

                        (
                            [0] => Array
                                (
                                    [player_id] => 0
                                    [nick] => xxxxx
                                    [score] => 2
                                    [time_int] => 2680
                                    [time_gmt] => 44:40
                                )
                        )
                )
        )
)


И мне необходимо обрезать длину всех значений. Поскольку уровень и опыт использования php довольно низкий, у меня получаются довольно громоздкие вложенные циклы, хотя у уверен что это можно решить уложившись в одну-три строчки.

В своих начинаниях я использовал вложенные конструкции foreach (доходило до трех!), и я не думаю что это правильный выход. Прошу помощи. Спасибо!
  • Вопрос задан
  • 2730 просмотров
Решения вопроса 1
rdifb0
@rdifb0
Программист, реалист
Вот в 3 строчки
array_walk_recursive($your_array, function(&$value){
	$value = substr($value, 0, 3); // или что там вы подразумеваете под обрезанием
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Подозреваю, что нужна рекурсия.

Примерный алгоритм может быть таким:
function Circumcision($arr, $size) // :-)
{
  $arr = array_slice($arr, 0, $size);
  foreach($arr as $item)
  {
     if(is_array($item))
     {
        $item = Circumcision($item, 1); // привык к ооп, если что я не виноват :)
     }
  }
  return $arr;
}

$input = array("a", "b", "c");
$result = Circumcision($input, 1);

Давно не программирую на PHP, мог забыть нюансы и не уверен, что код заработает. Но идея, думаю, должна быть понятна.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы