Вырезать строку по подстроке после того, как ничего не осталось

У меня есть строка 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); 
?>
Другие вопросы по тегам