Błąd wywołany przez if (PHP)

Witam,  posiadam taki kod:

if($value = $form->values()):

			if($value['acp_sl_owner']):

				$owners = $value['acp_sl_owner'];



				if(!($owners instanceof \IPS\Member)):

					$return = [];



					foreach(is_array($owners) ? $owners : explode(',', $owners) as $v):

						if($v instanceof \IPS\Member):

							$return[$v->member_id] = $v->member_id;

						elseif($v):

							$member = \IPS\Member::load($v);

							if($member->member_id):

								$return[$member->member_id] = $member->member_id;

							endif;

						endif;

					endforeach;



					if(!empty($return)):

						$value['acp_sl_owner'] = implode(',', $return);

					endif;

				endif;

			endif;

			

        if($value = $form->values()):

			if($value['acp_sl_guardian']):

				$guardians = $value['acp_sl_guardian'];



				if(!($guardians instanceof \IPS\Member)):

					$return = [];



					foreach(is_array($guardians) ? $guardians : explode(',', $guardians) as $v):

						if($v instanceof \IPS\Member):

							$return[$v->member_id] = $v->member_id;

						elseif($v):

							$member = \IPS\Member::load($v);

							if($member->member_id):

								$return[$member->member_id] = $member->member_id;

							endif;

						endif;

					endforeach;



					if(!empty($return)):

						$value['acp_sl_guardian'] = implode(',', $return);

					endif;

				endif;

			endif;

I dostaję taki błąd:

ParseError: syntax error, unexpected '}', expecting elseif (T_ELSEIF) or else (T_ELSE) or endif (T_ENDIF) (0)

Więc jaki powinien być warunek nad:

if($value = $form->values()):

       if($value['acp_sl_guardian']):

            $guardians = $value['acp_sl_guardian'];

 

Patrząc na ten kod i “zwijając”* zawarte tam instrukcje if => endif wychodzi mi na to, że tam brakuje aż 2 endif - sam posprawdzaj.

 

* “zwijanie” to usuwanie najmniejszych fragmentów kodu (tu: if => endif) w celu uproszczenia kodu i łatwiejszego znalezienia błędu. Robisz to na kopii pliku oczywiście.

 

Mógłbyś mnie nakierować gdzie to brakuje? Patrzę się na to godzinę i nic nie widzę.

@Pablo_Wawa Nie rozumiem nic z “zwijanie” , kasując to i tak wyświetla mi się informacja że tego brakuje

Masz dwie podobne sekcje, każda zaczyna się

if($value = $form->values()):

i nie jest zamknięta instrukcją

endif;

 

Ogranicz w ogóle te ify… Tego się czytać nie da, dwa poziomy zagłębienia to max…

Swoją drogą ten kod jest strasznie “niechlujny” - masz praktycznie dwa takie same fragmenty kodu, różnica polega na użyciu innej stałej tekstowej (raz ‘acp_sl_owner’ a raz ‘acp_sl_guardian’) - warto z tego zrobić funkcję (z parametrem) i ją dwa razy wywoływać.

Wystarczyło wykasować if($value = $form->values()):

Niezupełnie. Można usunąć drugie wystąpienie tego wiersza (mówię o if ), ale nie pierwsze, bo tam następuje przypisanie wartości do zmiennej $value, z której potem korzystasz.

No i wtedy wciąż brakuje endif dla “zamknięcia” tego warunku.