Вырезать строку по подстроке после того, как ничего не осталось
У меня есть строка Field-Text-Datepicker
, Мне нужно "взорвать" его в следующем массиве:
array(
[0] => field-text-datepicker
[1] => field-text
[2] => field
);
Я пробовал несколько комбинаций strrchr()
, рекурсия и для циклов, но все, что я сделал, кажется невероятно сложным и неэффективным. Есть ли какой-то простой способ, которого я не вижу? Если нет, я опубликую беспорядок, который я уже написал.:)
Зачем мне это нужно?
Для лучшей организации кода мне иногда нужно объявлять несколько классов в одном файле. Это проблема для моего автозагрузчика SPL, который загружает файлы в соответствии с именами классов. Из-за этого мне нужно получить каждое возможное имя файла для загрузки от наиболее вероятного к наименее.
Заранее спасибо!:)
2 ответа
Использование array_slice()
с переменными смещениями:
$arr = explode('-', strtolower($str));
for ($i = 1, $c = count($arr); $i < $c; $i++) {
$result[] = implode('-', array_slice($arr, 0, -$i));
}
Там вы идете! Я только что проверил и он печатает именно то, что вам нужно =)
<?php
$str = "Field-Text-Datepicker";
$str = strtolower($str);
$array = explode('-',$str);
$count = count($array);
$output_array = [];
for($i=1;$i<=$count;$i++)
$output_array[$count-$i] = implode('-',array_slice($array,0,$i));
var_dump($output_array);
?>