Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zmiana funkcji each na inne rozwiązanie
Forum PHP.pl > Forum > Przedszkole
xmarko

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

vokiel
Musisz dodać jeszcze if w foreach i sprawdzać warunek tak jak w while. Czyli while + each = foreach + if.
xmarko

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);
}

}
kamil_lk
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ż
xmarko
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ć
vokiel
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.