Можно ли оптимизировать приведенный код

12 3
SM
На сайте с 25.07.2009
Offline
38
1444

Имеем переменную


$folder = 'news/catalog/my/';

Необходимо организовать следующий вывод:


/news/catalog/my/
/news/catalog/
/news/
/

Именно в такой последовательности.

Имею такой скрипт, но чем-то он меня не устраивает, чем понять не могу, вот сидит сомнение, а не понимаю в чем сомневаюсь :confused: . Может есть более элегантное решение?


$ArrayFolder = explode('/','/'.$folder);
for($i=count($ArrayFolder)-2; $i>=0; $i--){
$PathToCashMenu = '';
for($j=0; $j<$i+1; $j++){
$PathToCashMenu.= $ArrayFolder[$j].'/';
}
print $PathToCashMenu.'<br>';
}
siv1987
На сайте с 02.04.2009
Offline
427
#1


$out = explode( '/', $folder );
if( sizeof( $out ) )
{
foreach( $out as $v )
{
$pt .= $v.'/';
$arr[] = $pt;
}
}

$arr = array_reverse( $arr );
print_r( $arr );
SM
На сайте с 25.07.2009
Offline
38
#2
siv1987:

$out = explode( '/', $folder );
if( sizeof( $out ) )
{
foreach( $out as $v )
{
$pt .= $v.'/';
$arr[] = $pt;
}
}

$arr = array_reverse( $arr );
print_r( $arr );

Спасибо, но опять придется подключать цикл для обработки массива $arr и вывод ваш не совсем отвечает условиям, нет ведущего /

И еще в своем коде я могу прервать основной цикл, при условии если сформированная строка отвечает определенным условиям, вместо

print $PathToCashMenu.'<br>';
стоит условие, т.е. можно прервать цикл не обходя его полностью.

Возможно всему виной праздники?

LinnTroll
На сайте с 12.01.2011
Offline
15
#3


$e = explode('/', rtrim($folder,'/'));
foreach ($e as $a) {
print(join('/', $e)."/<br>");
array_pop($e);
}


---------- Добавлено в 21:28 ---------- Предыдущее сообщение было в 21:22 ----------

Прошу прощения, забыл про слеш впереди


$e = explode('/', '/'.rtrim($folder,'/'));
foreach ($e as $a) {
print(join('/', $e)."/<br>");
array_pop($e);
}
http://vps.ua/ (https://vps.ua/clients/aff.php?aff=201) - самый лучший хостинг.
SM
На сайте с 25.07.2009
Offline
38
#4

LinnTroll, Спасибо, сам поправил и проверил, пока Ваше решение лучшее и производительное.

Dreammaker
На сайте с 20.04.2006
Offline
569
#5
SwordsMan:
и производительное.

от вашего кода сервер падал? о_О

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#6

SwordsMan, просто порекомендую вам, не используйте for без острой необходимости, он очень тормозной. Его использовать лучше там, где много массивов однотипных или не рабочем проекте, там для себя.

Лучше использовать foreach или while с ручным $i++

Возможно с появлением PHP 5.4 всё измениться т.к. нам обещают горы плюшек в сторону ускорения всех функций, но пока имеем, то что имеем.

---------- Добавлено в 01:35 ---------- Предыдущее сообщение было в 01:33 ----------

Так же никогда не делайте:

$i=count($ArrayFolder)-2;

лучше так:

$count=sizeof($ArrayFolder))-2;

for($i=$count);

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
LinnTroll
На сайте с 12.01.2011
Offline
15
#7
LEOnidUKG:
SwordsMan,

$count=sizeof($ArrayFolder))-2;
for($i=$count);

Так быстрее потому что вылетает с ошибкой даже не отработав?

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#8
LinnTroll:
Так быстрее потому что вылетает с ошибкой даже не отработав?

Я привёл пример, что подсчёт количества нужно выводить за пределы for и использовать sizeof.

Не думайте, что вы самый умный ок?

А то что там скобочки не так стоят и for не полностью, я думаю ТС поймёт и так.

SM
На сайте с 25.07.2009
Offline
38
#9

Dreammaker, Нет конечно, просто сомневался в обозначенном мной решении, сомневался, чую что что-то не так, вот и ищу совета у коллектива...

---------- Добавлено в 23:47 ---------- Предыдущее сообщение было в 23:43 ----------

LEOnidUKG, И вам спасибо, видимо по сему и сомневался.

---------- Добавлено в 23:49 ---------- Предыдущее сообщение было в 23:47 ----------

LEOnidUKG:
Я привёл пример, что подсчёт количества нужно выводить за пределы for и использовать sizeof.
Не думайте, что вы самый умный ок?
А то что там скобочки не так стоят и for не полностью, я думаю ТС поймёт и так.

Я понимаю :).

Спасибо всем, подсказали и тихо вывели из застоя, всех со всеми наступившими и наступающими.

LinnTroll
На сайте с 12.01.2011
Offline
15
#10
LEOnidUKG:
Я привёл пример, что подсчёт количества нужно выводить за пределы for и использовать sizeof.
Не думайте, что вы самый умный ок?
А то что там скобочки не так стоят и for не полностью, я думаю ТС поймёт и так.

Ок, уговорили.

Только обьясните чем sizeof быстрее count

http://php.net/manual/ru/function.sizeof.php

---------- Добавлено в 21:51 ---------- Предыдущее сообщение было в 21:50 ----------

LinnTroll:
Ок, уговорили.

Только обьясните чем sizeof быстрее count
http://php.net/manual/ru/function.sizeof.php

Ох ёппп.. не допёр что имелось в виду)

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий