| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

03-12-2009, 13:55
|
|
Pust
Registrierter Benutzer
|
|
Registriert seit: Feb 2008
Beiträge: 93
|
|
array-Funktion, Element löschen, andere Elemente nachrücken
Hi,
ich suche eine Arrayfunktion, die aus
PHP-Code:
<?php
$queue = array("Orange", "Banane", "Birne");
array_TOLLE FUNKTION($queue, "Banane");
?>
Als Ergebnis will ich dann:
PHP-Code:
Array
(
[1] => Orange
[2] => Birne
)
Gibt es so eine Funktion? Hab jetzt schon einiges gefunden, aber nichts, was paßt.
Ich möchte in einer Schleife verschiedene Elemente aus einem Array löschen und dann als Ergebnis z.B.
"Dies ist ein langer Satz mit verschiedenen Worten und einem Punkt."
Löschen: ein, einem, und
ergibt: "Dies ist langer Satz mit verschiedenen Worten Punkt."
Sieht derzeit so aus:
PHP-Code:
for($x=0;$x<=$anzahl;$x++)
{
if(in_array($sprach[$x],$frage))
{
$sprach[$x]='';
}
}
Jetzt will ich natürlich nicht an den Stellen der ersetzten Elemente "" stehen haben, sondern diese Elemente komplett rauslöschen und die anderen sollen nachrücken, so wie ganz oben beschrieben.
Ich hoffe, das ist jetzt nicht zu verwirrend...
danke schonmal und Grüße,
Pust
|

03-12-2009, 13:58
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
array_diff()
|

03-12-2009, 14:02
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
das würde doch mit preg_replace viel einfacher gehen als über den Umweg mit dem Array, oder gibt es noch einen anderen Grund, der das Array notwendig macht?
Beispiel:
PHP-Code:
$text = preg_replace('<\\b(ein(e[mnrs]?)?|und|oder)\\b>i', '', $text);
$text = preg_replace('< +>', ' ', $text);
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

03-12-2009, 14:05
|
|
Pust
Registrierter Benutzer
|
|
Registriert seit: Feb 2008
Beiträge: 93
|
|
array_dif gibt mir die Unterschiede zurück.
Ich will ein Element aber aus einem Array herauslöschen. Welches das ist, wird ja vorher schon definiert.
|

03-12-2009, 14:09
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

03-12-2009, 14:09
|
|
Pust
Registrierter Benutzer
|
|
Registriert seit: Feb 2008
Beiträge: 93
|
|
Ich brauche die arrays beide zur späteren Verarbeitung noch: Das Originale und das geänderte.
Außerdem ist das, was aus dem Array gelöscht werden soll, ebenfalls in einem Array definiert.
Ich gehe in der FOR-Schleife etwa so vor:
Gehe $array solange durch, bis alle Elemente aus $array_such durchprobiert wurden.
Da später ein Zähler durch die arrays geht, brauch ich die Elemente.
|

03-12-2009, 14:13
|
|
Pust
Registrierter Benutzer
|
|
Registriert seit: Feb 2008
Beiträge: 93
|
|
splice sieht interessant aus, ich hab aber nicht rausgefunden, wie ein Element ganz herausgelöscht wird und die anderen nachrücken. Es sind immer irgendwie Ersetzungen im Manual als Beispiel.... Hab ich was übersehen?
Edit:
Hab auch gerade mit array_slice experimentiert, aber es gelingt mir nicht ZWISCHENraus ein ELement zu löschn
Geändert von Pust (03-12-2009 um 14:19 Uhr)
|

03-12-2009, 14:19
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von Pust
Hab ich was übersehen?
|
Ja und zwar dass die letzten beiden Parameter in eckigen Klammern stehen. Das bedeutet, dass sie optional sind. Steht aber auch in der Erklärung der Parameter. Bitte demnächst erstmal richtig lesen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

03-12-2009, 14:24
|
|
Pust
Registrierter Benutzer
|
|
Registriert seit: Feb 2008
Beiträge: 93
|
|
Nein, hab schon gesehen, daß die optional sind. Ich hab mir auch die Beispiele angeschaut. Hat mir trotzdem bei meinem Problem nicht weitergeholfen.
|

03-12-2009, 14:25
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
PHP-Code:
$txt = 'Dies ist ein langer Satz mit verschiedenen Worten und einem Punkt.'; $filter = array('ein', 'einem', 'und');
print_r(array_diff(explode(' ', $txt), $filter));
Ist natürlich nur eine "Näherungslösung". Sobald eines der zu filternden Wörter nicht zwischen Leerzeichen steht, wird es nicht gefiltert.
|

03-12-2009, 14:28
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von Pust
Hat mir trotzdem bei meinem Problem nicht weitergeholfen.
|
Warum nicht, wo hakt's denn?
PHP-Code:
$test = array("a", "b", "c", "d");
// "c" soll gelöscht werden (Index 2):
array_splice($test, 2, 1);
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

03-12-2009, 14:34
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von Pust
Ich brauche die arrays beide zur späteren Verarbeitung noch: Das Originale und das geänderte.
|
array_filter()
Zitat:
Zitat von Pust
Außerdem ist das, was aus dem Array gelöscht werden soll, ebenfalls in einem Array definiert.
|
PHP-Code:
function filterkaffee($kaffee, $filter) {
$gefiltert = array ();
foreach ($kaffee as $bohne) {
if (!in_array($bohne, $filter, TRUE)) {
$gefiltert[] = $bohne;
}
}
return $gefiltert;
}
$kaffee = array ('jacobs', 'dallmayr', 'tchibo', 'melitta');
$filter = array ('melitta');
$gefiltert = filterkaffee($kaffee, $filter);
var_dump($kaffee);
var_dump($gefiltert);
Für dein ursprüngliches Problem würde ich eine andere Lösung wählen:
PHP-Code:
$haystack = 'Dies ist ein langer Satz mit verschiedenen Worten und einem Punkt.';
$filter = array ('ein', 'einem', 'und');
// ein kleines i am Ende macht den PCRE "case-insensitiv"
// und ein kleines u UTF-8-tauglich
$pcre = '/(?<!\p{L})(\Q' . implode('\E|\Q', $filter) . '\E)(?!\p{L})/';
$gefiltert = preg_replace($pcre, '', $haystack);
var_dump($gefiltert);
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (03-12-2009 um 15:01 Uhr)
|

03-12-2009, 14:46
|
|
Pust
Registrierter Benutzer
|
|
Registriert seit: Feb 2008
Beiträge: 93
|
|
Ah ich Trottel!!
$test=array_splice($sprach,$x,1);
Gibt $test natürlich nur das zu löschende Wort aus!!
Okay, danke, so funktioniert es:
PHP-Code:
$sprach="dies ist wo ein langer satz";
$sprach = explode(" ", $sprach);
$frage = array("wer", "wie", "wo", "was", "warum", "wozu", "weshalb", "woher");
$anzahl = count($sprach);
for($x=0;$x<=$anzahl;$x++)
{
if(in_array($sprach[$x],$frage))
{
$treffer=1;
array_splice($sprach,$x,1);
}
}
print_r ($sprach);
Ergibt
Array ( [0] => dies [1] => ist [2] => ein [3] => langer [4] => satz )
Danke nochmal für die Hilfe!
|

03-12-2009, 14:49
|
|
Pust
Registrierter Benutzer
|
|
Registriert seit: Feb 2008
Beiträge: 93
|
|
Zitat:
Zitat von onemorenerd
Ist natürlich nur eine "Näherungslösung". Sobald eines der zu filternden Wörter nicht zwischen Leerzeichen steht, wird es nicht gefiltert.
|
Ja, das ist mir klar. Aber das muß ich riskieren, wenn ich per RegEx kurze Sachen wie "wo" rauslösche, wären ja z.B. auch Wörter wie "wort" kaputt oder wenn ich "der" raushaben will, würde aus "derzeit" nur noch "zeit"...
Darum denke ich, Leerzeichen sind noch am Sinnvollsten. Satzzeichen werden auch vorher entfernt.
|

03-12-2009, 14:54
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von Pust
Aber das muß ich riskieren, wenn ich per RegEx kurze Sachen wie "wo" rauslösche, wären ja z.B. auch Wörter wie "wort" kaputt oder wenn ich "der" raushaben will, würde aus "derzeit" nur noch "zeit"...
|
Das ist nicht ganz richtig. Wenn du den Ausdruck (wie in meinem ersten Beispiel) an den Wortgrenzen verankerst (\b), passiert das nicht.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|