Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Zmiana funkcji each na inne rozwiązanie
xmarko
post 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
Go to the top of the page
+Quote Post
vokiel
post 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.


--------------------
Go to the top of the page
+Quote Post
xmarko
post 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
Go to the top of the page
+Quote Post
kamil_lk
post 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ż
Go to the top of the page
+Quote Post
xmarko
post 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
Go to the top of the page
+Quote Post
vokiel
post 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.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.04.2024 - 00:32