[PHP]Zmiana funkcji each na inne rozwiązanie |
[PHP]Zmiana funkcji each na inne rozwiązanie |
21.01.2021, 20:21:56
Post
#1
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 26.02.2004 Ostrzeżenie: (0%) |
Cześć, Mam taki kawałek kodu, który znalazłem w sieci: while ($loop && ( ( $option = each($children[$parent]) ) || ( $parent > $root_id ) )) { Proszę o pomoc w modyfikacji kodu: $option = each($children[$parent]) Programuję w PHP w wolnym czasie.... W wersji PHP 7.2 - pokazuje mi błąd funkcji. Funkcję each - powinienem zmienić na : foreach ($children[$parent] as $option) Jednak w nie mogę takiego zapisu wykorzystać w pętli while. Prosze o jakieś sugestie zmiany kodu -------------------- marko
|
|
|
22.01.2021, 09:53:31
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) |
Musisz dodać jeszcze if w foreach i sprawdzać warunek tak jak w while. Czyli while + each = foreach + if.
-------------------- |
|
|
22.01.2021, 21:16:57
Post
#3
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 26.02.2004 Ostrzeżenie: (0%) |
Zrobilem tak, jednak nie działa: foreach ($children[$parent] as $option){ if ($loop &&(( $parent > $root_id ))){ Cały kod funkcji przed zmianami: while ($loop && ( ( $option = each($children[$parent]) ) || ( $parent > $root_id ) )) { if ($option === false) { $parent = array_pop($parent_stack); // HTML for menu item containing childrens (close) $html[] = str_repeat("\t", ( count($parent_stack) + 1 ) * 2) . '</ul>'; $html[] = str_repeat("\t", ( count($parent_stack) + 1 ) * 2 - 1) . '</li>'; } elseif (!empty($children[$option['value']['id']])) { $tab = str_repeat("\t", ( count($parent_stack) + 1 ) * 2 - 1); // HTML for menu item containing childrens (open) $this->html[] = sprintf( '%1$s<li><a href="%2$s">%3$s</a>', $tab, // %1$s = tabulation $option['value']['link'], // %2$s = link (URL) $option['value']['title'] // %3$s = title ); $this->html[] = $tab . "\t" . '<ul class="submenu">'; array_push($parent_stack, $option['value']['parent_id']); $parent = $option['value']['id']; } else // HTML for menu item with no children (aka "leaf") $this->html[] = sprintf( '%1$s<li><a href="%2$s">%3$s</a></li>', str_repeat("\t", ( count($parent_stack) + 1 ) * 2 - 1), // %1$s = tabulation $option['value']['link'], // %2$s = link (URL) $option['value']['title'] // %3$s = title ); } // HTML wrapper for the menu (close) $this->html[] = '</ul>'; return implode("\r\n", $this->html); } } -------------------- marko
|
|
|
22.01.2021, 22:03:11
Post
#4
|
|
Grupa: Zarejestrowani Postów: 325 Pomógł: 33 Dołączył: 31.05.2008 Ostrzeżenie: (0%) |
Cytat Musisz dodać jeszcze if w foreach i sprawdzać warunek tak jak w while. Czyli while + each = foreach + if. Cytat Zrobilem tak, jednak nie działa Pokaż |
|
|
22.01.2021, 22:45:20
Post
#5
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 26.02.2004 Ostrzeżenie: (0%) |
Zamieniłem while na
foreach ($children[$parent] as $option){ if ($loop &&(( $parent > $root_id ))){ ........... Nie ma doświadczenia - wygląda, że nie zrozumiałem jak to należy zrobić -------------------- marko
|
|
|
23.01.2021, 11:59:39
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) |
Przeanalizuj kod i pomyśl co sprawdza if i czy te zmienne zostały definiowane w ogóle.
Dodatkowo, jeśli piszesz, że nie działa to napisz dokładnie co nie działa - czy nie przerywa pętli we właściwym momencie, czy wyświetla nie te rzeczy które byś chciał, czy się w ogóle skrypt nie uruchamia i wyrzuca jakieś błędy. -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 09:50 |