@burov0798
Пытаюсь изучать php\js

Как правильно сгруппировать массив php?

Добрый день. Сижу, ломаю голову, как сгруппировать такой массив:
array(
	"/home/fol1/test.txt",
	"/home/fol1/Browsers/test2.txt",
	"/home/fol2/Browsers/test3.txt",
	"/home/fol2/Browsers/ttre/test2.txt"
)

В такой:
аrrау(

	"fol1" => array (
	"/home/fol1/test.txt",
	"/home/fol1/Browsers/test2.txt"
	),

	"fol2" => array (
	 "/home/fol2/Browsers/test3.txt",
	"/home/fol2/Browsers/ttre/test2.txt"
	)
);
  • Вопрос задан
  • 125 просмотров
Решения вопроса 2
0xD34F
@0xD34F
foreach ($arr as $el) {
  $grouped[explode('/', $el)[2]][] = $el;
}
Ответ написан
Комментировать
@alexalexes
Если строки в массиве строго форматированы, и путь всегда начинается с "/home/каталог", то, чтобы получить ключ для вновь сформировываемого массива, достаточно функции explode(), если вам нужно более гибко искать название каталога, то придется вычленять его регулярным выражением.
<?
  $input_arr = [
  "/home/fol1/test.txt",
  "/home/fol1/Browsers/test2.txt",
  "/home/fol2/Browsers/test3.txt",
  "/home/fol2/Browsers/ttre/test2.txt"
  ];
  $out_arr = [];
  foreach($input_arr as $item)
  {
    $folders = explode('/', $item);
    $key = $folders[2];
    if(!isset($out_arr[$key]) || !array_key_exists($item, $out_arr[$key])) // если еще не был такой путь
      $out_arr[$key][] = $item;
  }
  print_r($out_arr);
?>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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