php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.11.2008, 15:18  
Erfahrener Benutzer
 
Registriert seit: 14.09.2004
Beiträge: 382
Crypi
Standard Schlüssel eines Array auf Muster überprüfen und kopieren

Hai,

ich hab eine Array, konkret $_POST, von dem ein bestimmter Teil in einer anderen Variable abgespeichert werden soll.
Das Array soll nach Schlüsseln durchsucht werden, die einem bestimmten Muster entsprechen und diese sollen in einer neue Variable kopiert werden (samt dem entsprechenden Wert).

Das Einzige was mir einfallen würde, wäre ein durchlaufen mit foreach um dann jeweils den Schlüssel zu untersuchen.
Das erscheint mir sehr aufwendig.

Gibts da eine einfachere Lösung?

Gruß,
Crypi
__________________
PostgreSQL Forum:
www.pg-forum.de
Crypi ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.11.2008, 15:20  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ja. Ein leeres Result-Array erstellen ('Schlüssel' => NULL) und über array_intersect_key verknüpfen. Result-Array als 2.Parameter benutzen.

[edit]
PHP-Code:
<?
$_POST 
= array (
'a' => 'a1' ,
'b' => 'b1' ,
'c' => 'c1' ,
);

$result = array (
'b' => NULL ,
'c' => NULL ,
'd' => NULL ,
);

var_dump (array_intersect_key ($_POST $result));
/*
array(2) {
  ["b"]=>
  string(2) "b1"
  ["c"]=>
  string(2) "c1"
}
*/

var_dump (array_merge ($result array_intersect_key ($_POST $result)));
/*
array(3) {
  ["b"]=>
  string(2) "b1"
  ["c"]=>
  string(2) "c1"
  ["d"]=>
  NULL
}
*/
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (17.11.2008 um 15:26 Uhr).
nikosch ist offline  
Alt 17.11.2008, 15:22  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Vielleicht hilft Dir array_walk_recursive weiter.
Vielleicht ist es aber auch einfacher, die POST-Daten anders zu strukturieren. Wie sieht das Muster denn bisher aus und wie kommt es zustande?

Zitat:
Zitat von nikosch Beitrag anzeigen
Ein leeres Result-Array erstellen ('Schlüssel' => NULL) und über array_intersect_key verknüpfen.
Auch eine interessante Möglichkeit
David ist offline  
Alt 17.11.2008, 15:30  
Erfahrener Benutzer
 
Registriert seit: 14.09.2004
Beiträge: 382
Crypi
Standard

Ich antworte mal bevor ich mir die Lösungen angucke.

$_POST entsteht aus einem Formular, wer hätte das gedacht....
Naja, das Formular repräsentiert eine n:m Verknüpfungs-Tabelle einer Datenbank.
Dabei kann ein Objekt mit mehreren Objekten eines anderen Typs "verbunden" werden.
Hierbei kann der Verbindung dann ein Wert zugewiesen werden.

Dabei haben die "input-text"-Felder eben ähnliche Namen "field*" * wird für jedes Feld durch die laufendenummer des Objektes ersetzt.

Ich wollte jetzt, zur Übergabe an die Klasse, die sich mit "in die Datenbank schreiben" etc beschäftigt, nur die relevanten $_POST-Daten übergeben.


Crypi
__________________
PostgreSQL Forum:
www.pg-forum.de
Crypi ist offline  
Alt 17.11.2008, 15:34  
Erfahrener Benutzer
 
Registriert seit: 14.09.2004
Beiträge: 382
Crypi
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Ja. Ein leeres Result-Array erstellen ('Schlüssel' => NULL) und über array_intersect_key verknüpfen. Result-Array als 2.Parameter benutzen.

[edit]
PHP-Code:
<?
$_POST 
= array (
'a' => 'a1' ,
'b' => 'b1' ,
'c' => 'c1' ,
);

$result = array (
'b' => NULL ,
'c' => NULL ,
'd' => NULL ,
);

var_dump (array_intersect_key ($_POST $result));
/*
array(2) {
  ["b"]=>
  string(2) "b1"
  ["c"]=>
  string(2) "c1"
}
*/

var_dump (array_merge ($result array_intersect_key ($_POST $result)));
/*
array(3) {
  ["b"]=>
  string(2) "b1"
  ["c"]=>
  string(2) "c1"
  ["d"]=>
  NULL
}
*/
Wenn ich es richtig verstehe muss ich dann aber vorher ein Array erzeugen, dass genau die Schlüssel enthält nach denen ich im anderen Array suchen möchte, oder?
also auch wieder eine foreach.. zumindest in dem von mir skizzierten Fall.

hmm auch nicht das was ich gehofft hatte

Crypi
__________________
PostgreSQL Forum:
www.pg-forum.de
Crypi ist offline  
Alt 17.11.2008, 15:36  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ehrlich gesagt, Deine Anwendungsbeispiel verstehe ich nicht. Wenn Du aber sagst "einem bestimmten Muster entsprechen", dann muss dieses Muster natürlich existieren. Du kannst auch was aus

array ('Name 1' , 'name 2' ... );
preg_match ('muster' , ...)
array_flip ();

und den o.g. Funktionen basteln.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 17.11.2008, 15:40  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Schau Dir mal mit
PHP-Code:
<form method="post">
  <div>
    <input type="text" name="x[1]" value="a" />
    <input type="text" name="x[2]" value="b" />
    <input type="text" name="x[3]" value="c" />
    <br />
    <input type="text" name="x[95][0]" value="A" />
    <input type="text" name="x[95][1]" value="B" />
    <input type="text" name="x[98][0]" value="X" />
    <br />
    <input type="submit" />
  </div>
</form>
<?php
if (isset($_POST['x'])) {
  echo 
'<pre>';
  
var_dump($_POST);
  echo 
'</pre>';
}
?>
an, wie $_POST aussieht, wenn Du das Formular abschickst.
Dann müsstest Du nicht mehr auf $_POST['feld34'] zugreifen, sondern auf $_POST['feld'][34]. Wie Du im Beispiel sehen kannst geht das auch mehrdimensional. Und Du kannst auch foreach() und all die anderen Array-Funktionen/Operatoren/... verwenden. Muss aber nicht sein
David ist offline  
Alt 17.11.2008, 15:54  
Erfahrener Benutzer
 
Registriert seit: 14.09.2004
Beiträge: 382
Crypi
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Ehrlich gesagt, Deine Anwendungsbeispiel verstehe ich nicht. Wenn Du aber sagst "einem bestimmten Muster entsprechen", dann muss dieses Muster natürlich existieren. Du kannst auch was aus

Einfacher:
es gibt viele input-boxen, die im Namen sehr ähnlich sind also:

field1
field2
field3

Ich möchte jetzt alle Paare des Arrays in ein anderes Array kopieren deren Schlüssel "field*" entspricht.
Ein Muster ist für mich nicht notwendigerweise vollständig, es stellt nur bestimmte Regeln die eingehalten werden müssen.

array_flip kommt nicht in frage, die Werte können durchaus mal gleich sein.
Aber dabei wären wir eh wieder bei einer foreach-Lösung.
Wenns nicht anders geht wird es eben so sein.

ich suchte eher:
PHP-Code:

## print_r($_POST) = "field1"=>1,"test"=>"nix", "field2"=>"test", "weißnich"=>"blub";

$array array_match_key("field*"$_POST);

print_r($array) => "field1"=>1,"field2"=>"test"
ich bin mir bewusst, dass die Ausgabe von print_r, eine andere wäre....

Die Funktion array_match_key ist dann wohl die, die ich mir selber bauen muss... schade.
__________________
PostgreSQL Forum:
www.pg-forum.de
Crypi ist offline  
Alt 17.11.2008, 15:57  
Erfahrener Benutzer
 
Registriert seit: 14.09.2004
Beiträge: 382
Crypi
Standard

Zitat:
Zitat von David Beitrag anzeigen
Schau Dir mal mit
PHP-Code:
<form method="post">
  <div>
    <input type="text" name="x[1]" value="a" />
    <input type="text" name="x[2]" value="b" />
    <input type="text" name="x[3]" value="c" />
    <br />
    <input type="text" name="x[95][0]" value="A" />
    <input type="text" name="x[95][1]" value="B" />
    <input type="text" name="x[98][0]" value="X" />
    <br />
    <input type="submit" />
  </div>
</form>
<?php
if (isset($_POST['x'])) {
  echo 
'<pre>';
  
var_dump($_POST);
  echo 
'</pre>';
}
?>
an, wie $_POST aussieht, wenn Du das Formular abschickst.
Dann müsstest Du nicht mehr auf $_POST['feld34'] zugreifen, sondern auf $_POST['feld'][34]. Wie Du im Beispiel sehen kannst geht das auch mehrdimensional. Und Du kannst auch foreach() und all die anderen Array-Funktionen/Operatoren/... verwenden. Muss aber nicht sein

sieht sehr gut aus!

Ich danke dir!
Hätte ich auch selbst drauf kommen können....
Tjaja manchmal weiß man mehr als man weiß das man es weiß...


Wie war das noch gleich: Ich weiß das ich nichts weiß... damit weiß ich mehr als die meisten wissen....

Danke für eure Hilfe!

Crypi
__________________
PostgreSQL Forum:
www.pg-forum.de
Crypi ist offline  
Alt 17.11.2008, 16:06  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Dein Plan ist mir nach wie vor kryptisch. Aber mach mal.

Niemand weiß etwas was er nicht weiß
Wolfgang Schäuble
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Schlüssel im Array ermitteln und Array ausgeben Felix PHP Tipps 2008 9 09.09.2008 11:17
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Array Schlüssel nehmen den gewünschten Wert nicht an lindner PHP Tipps 2006 3 19.10.2006 19:21
Assoziative Wertepaare in ein neues Array kopieren Anubis2183 PHP Tipps 2006 11 16.05.2006 15:10
Array schlüssel über wert finden Dave Waterstone PHP-Fortgeschrittene 3 29.03.2006 17:54
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Array Formatierung PHP Tipps 2006 3 17.01.2006 19:12
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
array in array filtern, kopieren oder irgendwas, das hilft PHP Tipps 2005 2 14.04.2005 12:10
einem Array neue Schlüssel zuweisen PHP Tipps 2005 4 11.03.2005 20:35
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php array schlüssel prüfen, muster mit arrays, php post array verketten, php ähnlich schlüssel in array suchen, prüfen ob schlüssel in array, php array teil eines schlüssels finden, prüfen, ob ein array als muster in einem anderen array enthalten ist., php feld array null überprüfen, array php durchsuchen schlüssel teil, array_intersect_key teil, array auf muster untersuchen, php schlüssel im array üprüfen, schlüssel von array prüfen php, array in neues array kopieren foreach, array keys nach muster durchsuchen, array nach key überprüfen php, php array variablen jeweils um 1 verschieben, php nach einem muster überprüfen, php param auf muster prüfen, schlüssel eines array überprüfen

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:18 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum