Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Arrayt ja yhdistäminen (PHP)

mvi10 [06.07.2007 08:15:49]

#

Yritän muodostaa SQL-kyselyn osaa alla olevista, eli tavoite olisi saada arrayjen a-e sisältö tuonne viimeiseen foreach-silmukkaan sen mukaan, miten if-lauseet sen sallivat (lonkat-array tulee siis lomakkeelta). Miten mahtaisi onnistua järkevimmin?

<?php
if (empty($lonkat)) {
		} else {
		$a = array('A/A');
		$b = array('A/B','B/B','B/A');
		$c = array('A/C','B/C','C/C','C/B','C/A');
		$d = array('A/D','B/D','C/D','D/D','D/C','D/B','D/A');
		$e = array('A/E','B/E','C/E','D/E','E/E','E/D','E/C','E/B','E/A');
		$lonkka = array();

		if (in_array("A",$lonkat)) {
			$lonkka[] = $a;
		}
		if (in_array("B",$lonkat)) {
			$lonkka[] = $b;
		}
		if (in_array("C",$lonkat)) {
			$lonkka[] = $c;
		}
		if (in_array("D",$lonkat)) {
			$lonkka[] = $d;
		}
		if (in_array("E",$lonkat)) {
			$lonkka[] = $e;
		}

		$query .= " AND (";
		foreach ($lonkat as $check6) {

			$query .= " lonkat = $check6 OR";
		}
		$query = substr($query, 0, -2);
		$query .= ")";
		} ?>

mvi10 [06.07.2007 12:43:48]

#

Kaksi peräkkäistä foreach-looppia ratkaisi ongelman.

Antti Laaksonen [06.07.2007 12:49:12]

#

Eli jos vaikka lomakkeelta on valittu A ja C, kyselyyn tulee, että kenttä "lonkat" saa olla "A/A", "A/C", "B/C", "C/C", "C/B" tai "C/A"?

Nykyinen ratkaisusi näyttää ihan hyvältä. Jos laitat taulukkoon $lonkka toisia taulukoita, tarvitset kyllä kaksi sisäkkäistä for-silmukkaa. Muista myös laittaa merkkijonojen ympärille heittomerkit SQL-kyselyssä.

<?php

$lista = array('A', 'C', 'D');

$tiedot['A'] = array('A/A');
$tiedot['B'] = array('A/B', 'B/B', 'B/A');
$tiedot['C'] = array('A/C', 'B/C', 'C/C', 'C/B', 'C/A');
$tiedot['D'] = array('A/D', 'B/D', 'C/D', 'D/D', 'D/C', 'D/B', 'D/A');
$tiedot['E'] = array('A/E', 'B/E', 'C/E', 'D/E', 'E/E', 'E/D', 'E/C', 'E/B', 'E/A');

foreach ($lista as $ryhma) {
    foreach ($tiedot[$ryhma] as $tieto) {
        $osat[] = "tieto = '$tieto'";
    }
}

echo implode(" OR ", $osat);

?>

Jos kysely on muotoa "tieto = a OR tieto = b OR tieto = c", saman voi kirjoittaa myös "tieto IN (a, b, c)".

<?php

foreach ($lista as $ryhma) {
    foreach ($tiedot[$ryhma] as $tieto) {
        $osat[] = "'$tieto'";
    }
}

echo "tieto IN (" . implode(", ", $osat) . ")";

?>

Muoks. Huomasitkin saman jo itse...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta