Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Array überprüfen... - Aber wie? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Array überprüfen... - Aber wie?


 
Skyrunner
21-12-2003, 10:11 
 
Hi,
der Titel ist wenig Aussagekräftig aber mir is leider nix besseres eingefallen.
Also...

Ich habe ein Array $arr.
Dem habe ich in einer Schleife true oder false zugeordnet:

$arr=array($i => 'true');
Dabei ist $i eine Laufvariable.

Das eigendliche Problem besteht darin, dass $arr[$i] entweder true oder false als wert hat. Wenn jetzt aber beim ersten durchlauf der schleife $arr[$i] false ist und beim 2. durchlauf true dann wird eine erstmal unwichtige transaktion durchgeführt.

Was ich will ist aber dass wenn eine der beiden $arr[$i]'s false ergibt abgebrochen wird.

ich hoffe ihr habt verstanden was ich meine... ist ein recht merkwürdiges problem darum bitte ich um eure Hilfe.

Mein Code zum Vergleichen sieht derzeit so aus:
if($arr[$i] == 'false')
{
break 1;
}
else
{
#machwas
}

ich würde mich wahnsinnig freuen wenn ihr nen Tipp für mcih hättet :)

 
derHund
21-12-2003, 11:06 
 
naja,

auf die gefahr hin, daß ich dich falsch verstand:


if ($array[$i]) {
do_my_dirty_work();
}

oder, nee ... wenn eine der beide fals, abbrechen


if (!$array[$i1] || !$array[$i2]) {break;}


sagt doch mal, was an deinem code nicht funzt?

 
Günni
21-12-2003, 11:08 
 
Versuche es mal so:

if($arr[$i] == false) // Lass mal hier die ' weg.
{
break;
}
else
{
// machwas
}

 
Skyrunner
21-12-2003, 11:13 
 
em wie kommst du auf $i1 und $i2?

ich zeig mal den code im einzelnen....


$qf=mysql_query("SELECT wep,id,forschungen FROM game_waffen");

while($f=mysql_fetch_assoc($qf))
{
#echo "waffe: $f[wep]<br>";
$forschung=explode(";", $f[forschungen]);
$i=0;


foreach($forschung AS $array)
{
#echo"&nbsp;&nbsp;foreach $i<br>";
$expgenau=explode(":", $forschung[$i]);
#echo "&nbsp;&nbsp;for: $forschung[$i]<br>";

$qfo=mysql_query("SELECT * FROM game_explore
WHERE land_id='$daten_land[land_id]' AND f_id=TRIM('$expgenau[0]')
AND anz >=TRIM('$expgenau[1]')")or die(mysql_error());
if(mysql_num_rows($qfo) > 0)
{
$arr=array($i => 'true');
}
else
{
$arr=array($i => 'false');
}
#echo "&nbsp;&nbsp;array: $arr[$i]<br>";


foreach($arr AS $blubb)
{
if($arr[$i] == 'false')
{
break 1;
}
else
{
$qp=mysql_query("SELECT COUNT
(*) AS zahl FROM game_waffenprod WHERE w_id='$f[id]' AND land_id='$daten_land[land_id]'");
$b=mysql_fetch_assoc($qp);
if($b[zahl] == 0)
{
mysql_query("INSERT INTO game_waffenprod (w_id, land_id) VALUES ('$f[id]', '$daten_land
[land_id]')")or die(mysql_error());
}
}
}
$i++;
}

}
Es wird also jede Waffe aus ner statischen Tabelle durchgegangen. (WHILE)
Danach hol ich mir die forschungen aus nem textfeld in der tabnelle (format 1:5 [x=forschungs id, y= forschungsstufe])
das wird dann mit explode zerlegt und dann mit foreach durchgegangen.

Nun will ich im endeffekt wissen, bei welcher waffe EINE oder mehere von beiden $arr[$i]'s false ergibt.

ich hoffe diesmal war ich verständlicher ^^

EDIT:
@Günni: die ' hab ich nur gemacht weils in den Satz so gut reinpasste. damint meinte ich nur die mehrzahl der var. $arr[$i] :)
Aber schau dir mal dieses Posting an

EDIT2:
Wenn cih die ' weglasse werden mir trotzdem alle datensätze angezeigt beidenen $arr[$i] nur _EINMAL_ true ist. ich brauch aber alle DS wo es nioemals false ist bzw immer true ist

 
derHund
21-12-2003, 11:41 
 
häh?

du verwendest ein assoziatives array, welches einen incrementellen index hat? sinn? hab ich was übersehen?

du verwendest wahrheitswerte als string?

das i1 und i2 kam nur daher, daß du von genau 2 sachen sprachst ... egal ... ich schaus mir nochmal an.

 
Wurzel
21-12-2003, 12:01 
 
was ist eigentlich das ziel dieser ganzen aktion ... ausser ressourcen zu verbrennen :confused:

 
Skyrunner
21-12-2003, 12:07 
 
ich dachte das Problem könne man nur über ein Array lösen...
Ich habe ehrlich gesagt keine ahnung wie man das anders als übner ein Array lösen könnte.

Der Sinn des ganzen ist der dass nur die datensätze geschrieben werden bei denen $arr[$i] je nach anzahl der benötigten forschungen für diese waffe true ist. :dontknow: :danke: schonmal für eure bemühungen mir weiterzuhelfen :D

 
Wurzel
21-12-2003, 12:09 
 
ich meinte nicht das ziel, was du mit true oder false verfolgst, sondern,
was das (tun) ganze soll.

wenn ich mich recht entsinne, wolltest du im sql-forum mal wissen, wie
man einträge filtert, die NICHT vorhanden sind oder so?

 
Skyrunner
21-12-2003, 12:25 
 
Jo das stimmt.
Leider führte der Thread dort zu keinem Erfolg.

Deswegen habe ich mir etwas anderes ausgedacht.
Das Script an sich ist ja ok und sollte auch funktionieren. Es funktioniert ja auch.

Also werde ich das komplett erläutern jetz:

In der 1. while werden ALLE Waffen aus einer Tabelle geholt.
In der Spalte Forschungen steht dann sowas: 12:3 Das Bedeutet, dass Forschung Nummer 12 auf Stude 3 Ausgebaut sein muss damit man diese Waffe bauen kann. Und das ist auchncoh verkettet: 12:3;1:4;3:2 usw.
Mit den explodes hol ich das in Arrays dioe ich dann mit foreach durchlaufe.
Die erste ist die hier: foreach($forschung AS $array) .
In der stehen die einzelnen Forschungen (12:3 2:4 4:8) usw.
12:3 wird dann in 12 und 3 zerlegt. Dann schau ich in die Tabelle wo die Forschungen drin stehen die der user schon hat.
Wenn eine entsprechende Forschung gefunden wurde die dem user gehört dann ist $arr[$i] true.
Das problem hierbei ist dass es mehere Forschungen gibt (12:3;15:4;2:1 usw) Wenn nun aber die erste forschung nciht vorhanden ist (also false ist) und dann die 2. forschung durchlaufen wird die dann true ist dann ist diese Waffe zum bauen freigegeben, was ja nciht sein soll.

Darum meine Frage wie man sicherstellen kann dass beide forschungen(können auch 4 oder 5 sein, ist von der waffe abhängig) true seiun müssen.

Ich hoffe man konnte das jetzt irgendiwe ein bisschen besser verstehen :)

 
Wurzel
21-12-2003, 12:45 
 
da hast du dir was nettes ausgedacht :)

wenn man davon ausgeht, dass du eine hierarchie bzw abhängigkeit von
wertepaaren hast, wäre es imho sinniger,
- pflichtpaare in ein array zu holen/setzen
-- eventuell über stufen (array im array)
^^ das könnte auch fest definiert sein, weil vorgabewerte

- user_hat_paare in ein weiteres array (1 sql-abfrage)
- mit array-funktionen die vergleiche in einer schleife abarbeiten
-- => in_array(), array_diff(), array_intersect()
---- in_array() liefert zb schon true oder false
-- eventuell musst du das ganze rekursiv in einer funktion machen, um tiefere levels/abhängigkeiten zu prüfen

ist mal ein spontaner ansatz.

 
Skyrunner
21-12-2003, 12:59 
 
Ich wollte eigendlich nciht das ganze Script umändern. Ich wollte damit so schnell wie möglich fertig werden, da ich das morgen unbedingt brauche und da ein paartausend leute dranhängen...

Meine Überlegung war ein mehrdimensionales array zu verwenden doch wie benutz ich sowas?

 
Wurzel
21-12-2003, 13:17 
 
Original geschrieben von Skyrunner
Ich wollte eigendlich nciht das ganze Script umändern. Ich wollte damit
so schnell wie möglich fertig werden, da ich das morgen unbedingt brauche
und da ein paartausend leute dranhängen...
ob dich der code glücklich macht, wenn ein "paar tausend" gleichzeitig
zugreifen? da wird die db aber richtig spass haben ... aber du hast ja noch
min. 11 std ;)

Meine Überlegung war ein mehrdimensionales array zu
verwenden doch wie benutz ich sowas? wie ein "normales"
array. man muss nur den überblick haben.

vielleicht tastest du dich erstmal mit ein paar beispieldaten an die sache
ran, bevor du es endgültig implementierst.
mal als einfaches beispiel:<pre>
<?php
$muss = array();
$muss[] = "12:3";
$muss['12:3'][] = "17:4";
$muss['12:3'][] = "18:3";
$muss['12:3'][] = "1:7";
$muss[] = "15:4";
$muss['15:4'][] = "9:1";
$muss['15:4'][] = "5:5";
$muss['15:4'][] = "1:7";
print_r($muss);
$hat = array("12:3","17:4");

if(in_array($hat[0],$muss))
{
echo "bingo1";
if(in_array($hat[1],$muss[$hat[0]]))
{
echo "bingo2";
}
}
?>

 
derHund
21-12-2003, 13:21 
 
naja,

ein mehrdimensionales array benutzt du, man sollte es nicht glauben, wie ein eindimensionales, nur mußt du halt für die weiteren dimensionen auch 'koordinaten' angeben.

print_r ist in solchen fällen hilfreich, für mich zumindest.

ich persönlich würde das ganze script, sogar den ganzen background neu entwicklen. ich würde halt auch nicht mehr als einen wert in eine tabellenzelle packen ...

das, was du vorhast, dürfte nicht _so_ kompliziert sein, ....

wünsche dir viel erfolg. http://www.php-resource.de/forum/images/icons/icon14.gif


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:39 Uhr.