Optymalizacja warunku if

0

Cześć,
ma ktoś jakiś pomysł na optymalizację(żeby jakoś to skrócić) tego warunku if?

if($row['x1'] == $getX['name']){
	echo '<input type="checkbox" value="'.$getX['name'].'" checked="checked" name="names[]""/>
		</div>';
}else if($row['x2'] == $getX['name']){
	echo '<input type="checkbox" value="'.$getX['name'].'" checked="checked" name="names[]""/>
		</div>';
}else if($row['x3'] == $getX['name']){
	echo '<input type="checkbox" value="'.$getX['name'].'" checked="checked" name="names[]""/>
		</div>';
}else if($row['x4'] == $getX['name']){
	echo '<input type="checkbox" value="'.$getX['name'].'" checked="checked" name="names[]""/>
		</div>';
}else if($row['x5'] == $getX['name']){
	echo '<input type="checkbox" value="'.$getX['name'].'" checked="checked" name="names[]""/>
		</div>';
}else if($row['x6'] == $getX['name']){
	echo '<input type="checkbox" value="'.$getX['name'].'" checked="checked" name="names[]""/>
		</div>';
}else if($row['x7'] == $getX['name']){
	echo '<input type="checkbox" value="'.$getX['name'].'" checked="checked" name="names[]""/>
		</div>';
}else if($row['x8'] == $getX['name']){
	echo '<input type="checkbox" value="'.$getX['name'].'" checked="checked" name="names[]""/>
		</div>';
}else if($row['x9'] == $getX['name']){
	echo '<input type="checkbox" value="'.$getX['name'].'" checked="checked" name="names[]""/>
		</div>';
}else if($row['x10'] == $getX['name']){
	echo '<input type="checkbox" value="'.$getX['name'].'" checked="checked" name="names[]""/>
		</div>';
}else if($row['x11'] == $getX['name']){
	echo '<input type="checkbox" value="'.$getX['name'].'" checked="checked" name="names[]""/>
		</div>';
}else if($row['x12'] == $getX['name']){
	echo '<input type="checkbox" value="'.$getX['name'].'" checked="checked" name="names[]""/>
		</div>';
}else{
	echo '<input type="checkbox" value="'.$getX['name'].'" name="names[]""/>
		</div>';
}
0

Z 5 lat nie dotykałem php, ale wrzuciłbym to do jakiejś struktury słownikowej (aka mapa).

2

Podpowiem: pętla for od 1 do 12...

2

Chyba masz za dużo cudzysłowów, "odchudzony" kod

$rows = array_map(function($v) {return $row["x" . $v];}, range(1, 12));
$checked = in_array($getX['name'], $rows)) ? ' checked="checked"': '';
echo '<input type="checkbox" value="'.$getX['name']. '"' . $checked . ' name="names[]""/>
        </div>';
0
if($rowQuery){
	foreach($rowQuery as $row){
		$rows = array_map(function($v) {return $row["x" . $v];}, range(1, 12));
		$checked = in_array($getX['name'], $rows) ? ' checked="checked"': '';
		echo '<input type="checkbox" value="'.$getX['name']. '"' . $checked . ' name="names[]""/></div>';
	}
}

Dzięki. Zapomniałem jeszcze , że przed if mam pętlę i tego nie skopiowałem. Aktualnie kod wygląda tak(po poprawce)
Otrzymuję jednak komunikat:

Notice: Undefined variable: row in C:\xampp\htdocs\folder/x.php on line 99
Problem odnosi się do kontenera pętli foreach:

foreach($rowQuery as $row){

Jak to poprawić?

0

Musisz złapać tę zmienną do funkcji anonimowej: function($v) use ($row) { ... }

0

Dzięki, brak ostrzeżeń. Nie działa kod jednak tak jak miał działać. Nic się nie zaznacza w tych checkboxach.

$checked

zwraca string(0) ""


```php
if($rowCheckbox){
	foreach($rowCheckbox as $row){
	        $rows = array_map(function($v) use ($row) {return $row["image" . $v];}, range(1, 12));
	        $checked = in_array($xRow['name'], $rows) ? ' checked="checked"': '';
	        var_dump($checked);
	        echo '<input type="checkbox" value="'.$xRow['name']. ' '.$checked.' name="names[]" />
	       	</div>
	        ';
       }
}
0

Co zawiera tablica $rows?

0

Tablica zawiera nazwy kontenerów z pętli foreach.

0

Nie o to mi chodziło ;p
Wykonaj var_dump

0

:) Nieporozumienie. A zwraca NULL dla całego array:

array(12) { [0]=> NULL [1]=> NULL [2]=> NULL [3]=> NULL [4]=> NULL [5]=> NULL [6]=> NULL [7]=> NULL [8]=> NULL [9]=> NULL [10]=> NULL [11]=> NULL }
oraz

Notice: Undefined index: image1
Notice: Undefined index: image2
Notice: Undefined index: image3
Notice: Undefined index: image4
.........
Notice: Undefined index: image12
Notice: Undefined index: image1
Notice: Undefined index: image2
Notice: Undefined index: image3
Notice: Undefined index: image4
.........

i to wszystko w nieskończonej pętli.

0

No to teraz porównaj sobie, jakie indeksy próbuje sprawdzić aktualny kod z tymi, które sprawdza Twój w pierwszym poście, i zobacz różnicę ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1