Natürlich möchte ich auch die Möglichkeit haben, diesen Eintrag wieder
zu löschen. Mit "Unset" kann ich ein bestimmtes Array auch löschen. Aber
"array_search" funktioniert nicht. Ich wollte damit eine bestimmte
Position finden und dann diese mittels "unset" löschen. Weiß jemand Rat?
Danke im voraus für Eure Hilfe :-)
> // Dateiname in Array suchen und entsprechende Nummer löschen klappt nicht!
> if ($suche = array_search($dateiname, $liste))
> {
> unset($liste[$suche]);
> }
Du suchst hierbei nach den kompletten Strings in den values des Array.
Da $dateiname bei dir aber innerhalb eines html option tags zu finden
ist, wird er natürlich nicht gefunden.
prüfen, ob der Dateiname in dem entsprechenden String vorkommt.
> $eintrag="";
Hier könntest du z.B. mit stripos($eintrag,"value='$dateiname'") suchen,
hierbei solltest du nicht nur nach $dateiname suchen, damit nicht
zufällig eine Bezeichnung einem Dateinamen entspricht, welche du dann
eventuell nicht löschen willst.
HTH,
lieben Gruß,
Matze
Re: array_search funktioniert nicht
am 13.06.2006 13:21:22 von Elvira Nieswand
> Du könntest mit
>
> http://www.php.net/manual/de/function.array-walk.php
>
> durch das array laufen und mit
>
> http://www.php.net/manual/de/function.strpos.php
>
> prüfen, ob der Dateiname in dem entsprechenden String vorkommt.
>
> > $eintrag="
(\$event=='".$dateiname."'){echo ' selected';}?>>".$bezeichnung."";
Hi,
also irgendwie bekomme ich das mit "array_walk" nicht hin. Er findet einfach
nichts !!!! Kannst Du mir evtl. mit ein bisschen Quellcode helfen? Danke im
voraus :-)
Dieser Teil ist nicht so richtig sinnvoll. Generell speicherst Du, wenn ich
das richtig verstanden hab, HTML-Code (SELECT-OPTIONS) in einem Array,
welches Du wiederum serialisiert in einer Datei ablegst. Der ganze Code
passt in diese 4 Zeilen, wenn Du das überflüssige serialize() und
unserialize() weglässt:
> Natürlich möchte ich auch die Möglichkeit haben, diesen Eintrag wieder
> zu löschen.
>
> // Dateiname in Array suchen und entsprechende Nummer löschen klappt
> // nicht!
> if ($suche = array_search($dateiname, $liste)) {
> unset($liste[$suche]);
> }
Natürlich nicht, weil Du ja im Array keinen Dateinamen ablegst, sondern
HTML-Code. Du müsstest also etwa nach
suchen. Warum änderst Du Dein Modell nicht so, dass Du die Redundanzen
weglässt und in der Datei nur sowas wie $bezeichner\t$dateiname speicherst.
So eine Klasse hab ich irgendwann mal geschrieben.. Gebraucht hab ich sie
selten, weil ich seitdem immer eine Datenbank zur Verfügung hatte. Mit
dieser Klasse können (2er)-Tupel in einer Datei gespeichert werden. Falls
die Dateien sehr groà sind, sollte man die Klasse wohl um eine
Singleton-Methode erweitern und den Datei-Inhalt zwischenspeichern.
Hier bitte. Ich hab Dir mal Testdaten dazugeschrieben:
class FFSaver
{
private $filename;
// Constructor.
function FFSaver($filename)
{
$this->filename = $filename;
}
// Adds (or overwrites in case $key already exists) a key/value-pair to the
// file.
function add($key, $value)
{
$this->removeKey($key);
file_put_contents($this->filename, "$key\t$value\n", FILE_APPEND);
}
// Overwrites the content of $filename with the key/value-pairs of
// $array.
private function saveArray($array)
{
$tmp = array();
foreach ($array as $key => $value)
{
$tmp[] = "$key\t$value\n";
}
file_put_contents($this->filename, $tmp);
}
// Removes all matching key/value-pairs.
function removeKey($key)
{
$pairs = $this->getPairs();
if (array_key_exists($key, $pairs))
{
unset($pairs[$key]);
$this->saveArray($pairs);
}
}
// Removes all matching key/value-pairs.
function removeValue($value)
{
$pairs = $this->getPairs();
while (($key = array_search($value, $pairs)) !== false)
{
unset($pairs[$key]);
$this->saveArray($pairs);
}
}
// Returns an array of formatted strings. %key is replaced with key, %value
// with value. E.g.
//
// formatted('%key:%value')
//
// will return an array like Array ('key1:value1', ...).
function formatted($str)
{
$arr = array();
$pairs = $this->getPairs();
foreach ($pairs as $key => $value)
{
$tr = array('%key' => $key, '%value' => $value);
$arr[] = strtr($str, $tr);
}
return $arr;
}
// Removes all elements (empties the file).
function clear()
{
file_put_contents($this->filename, "");
}
}
> Hi,
>
> also irgendwie bekomme ich das mit "array_walk" nicht hin. Er findet einfach
> nichts !!!! Kannst Du mir evtl. mit ein bisschen Quellcode helfen? Danke im
> voraus :-)
Hallo,
entschuldige die späte Rückmeldung, war lang an der Uni. Natürlich geht
das so, wie ich es heut morgen dachte nicht. array_walk macht nicht das,
wofür ich es gehalten habe, war wohl noch etwas müde.
Folgendes sollte aber funktionieren:
function searchArray($array, $searchString){
foreach($array AS $key => $value){
if(strpos($value, $searchString) !== false){
return $key;
}
}
return false;
}
Oder du änderst die searchArray Methode so, dass sie dir den String
jedesmal aus $dateiname und $bezeichnung bastelt, und du dann nur die
beiden Parameter statt den ganzen String übergeben musst.
I.d.R. solltest du aber, wie von Steffen schon angemerkt eine andere
Form der Datenhaltung überlegen, bzw. deinen Dateiaufbau etwas überlegen.
greetz und HTH,
Matze
Re: array_search funktioniert nicht
am 14.06.2006 03:34:06 von joerg.nieswand
> I.d.R. solltest du aber, wie von Steffen schon angemerkt eine andere
> Form der Datenhaltung überlegen, bzw. deinen Dateiaufbau etwas überlegen.
>
> greetz und HTH,
> Matze
Jau, danke für Eure Hilfe. Es funktioniert alles prima :-))