webForumDet fria alternativet

kolla igenom array efter dubbla värden

5 svar · 304 visningar · startad av Matti

MattiMedlem sedan dec. 19993 781 inlägg
#1

Hej,

$antalfragor = $row["antalfragor"];

$alt = "1";
while ($alt <= $antalfragor) {

$sql = "UPDATE ling_fragor SET ordning='". $_POST["ordning" . $alt] ."' WHERE id='". $_POST["id" . $alt] ."'";
$result = mysql_query($sql);
 
 
$alt++;
}

Hur kolla igenom $_POST["ordningx"] efter dubbla värden? Värdet i $_POST["ordning1"] får inte finnas i $_POST["ordning3"]

MattiMedlem sedan dec. 19993 781 inlägg
#2

Man kan ju alltid skapa en textfil, kolla om $_POST["ordningx"] finns där, om den inte finns det så skriver man in den i textfilen och i databasen, och sedan fortsätter man med nästa $_POST["ordningx"]. Finns det någon snyggare lösning?

ChavezMedlem sedan maj 20001 297 inlägg
#3

Finns det ingen inbyggd funktion för detta? *funderar*

LAMPMedlem sedan mars 2002729 inlägg
#4

Är det inte effektivare att sköta selectreringen i sql-frågan? dbms brukar sköta sådant effektivare än något annat.

SPiNMedlem sedan mars 20005 832 inlägg
#5

Finns det ingen inbyggd funktion för detta? *funderar*

Klart att det finns det, vi pratar ju om PHP. ;)

Antingen kan du använda array_search() för att se om ett värde existerar, eller så kan du använda array_unique() för att plocka bort alla dubletter.

Exempel med array_search():

$found = array_search( "värde", $_POST );

if( $found == false ) {
     echo "Värde fanns inte i arrayen";
}
else {
     echo "Värde hittades på index: " . $found;
}

Exempel med array_unique():

array_unique( $_POST );

Notera att med array_unique() försvinner alla dubletter, du får inte tillbaka dem! Jag är osäker på att du kan använda array_unique() mot en global, associativ array. Kanske får du göra så här:

while( $curPostValue = array_shift( $_POST ) )
     $postArray[] = $curPostValue;

array_unique( $postArray );
MattiMedlem sedan dec. 19993 781 inlägg
#6

Perfekt, tack. Jag löste det med array_search. Fick skriva om en del av skriptet. Som det var från början hade jag en sida där man kunde ändra på ordningen på frågorna. Problemet var att på "ordningssidan" så listades frågorna efter värdet på fältet "ordning", och om fältet "ordning" var tomt för en fråga så dök den aldrig upp och alltså kunde man inte göra några ändringar på den.

Så jag gjorde så att frågorna visades via fråge-id:t istället (eftersom alla frågor har ett id). Sedan fick jag göra ytterligare en sida som listade frågorna via fältet "ordning" istället.

(postar koden för att jag ska kunna komma tillbaka och kolla hur jag gjorde ;) )

// hämta allt..
result = mysql_query("select * from ling_fragor order by id asc");

while($line = mysql_fetch_array($result)) {

$kolla_dubbletter[] = "";

// kolla om den här radens "ordning" redan finns i $kolla_dubbletter
$found = array_search( $line["ordning"], $kolla_dubbletter );

if( $found == false ) {
// skriv ut värdet på "ordning" som vanligt
echo "<tr><td width=100>" . $line["ordning"] . "</td>"; 
}
else {
// varna användaren
else {
echo "<tr><td width=100><b><font color=\"red\">" . $line["ordning"] . "</font> (finns redan)</b></td>"; 
}
// skriv ut länken till sidan där man kan ändra på frågans ordning
echo "<td width=500><a href=\"andra_ordning.php?id=" . $line["id"] . "\">" . $line["fragerubrik"] . "</a></td>\n</tr>"; 

// lägg till den här radens "ordning" i arrayn $kolla_dubbletter
$kolla_dubbletter[] = $line["ordning"];
}
Genererad på 381 ms · cache AV · v20260730165559-full.f96bc7eb