php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.02.2012, 15:55  
Neuer Benutzer
 
Registriert seit: 12.02.2012
Beiträge: 4
PHP-Kenntnisse:
Anfänger
Cherubim befindet sich auf einem aufstrebenden Ast
Standard Auf Array mit anderem Array zugreifen

Hi,

ich habe gerade ein wenig eine Denkblockade, und hoffe das mir hier evtl. jemand einen Lösungsansatz zeigen kann

Folgende Situation:

Ich habe ein Multidimensionales Array in dem ich Werte suche. Wenn ich den Wert gefunden habe, möchte ich an dieser Stelle im Array weitere Werte einfügen.

Die Werte finden ist kein Problem, meine Suchfunktion spuckt mir den kompletten "Pfad" zum Wert aus z.B.:
Code:
Array
(
    [0] => Array
        (
            [materials] => Array
                (
                    [11] => Array
                        (
                            [0] => typeID
                        )

                )

        )

)
Jetzt habe ich den Pfad, aber ich weiß leider nicht was ich damit anfangen kann, denn ich kann ja schlecht schreiben $sourceArray[$wasDaObenSteht].
Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt

Wie schaffe ich es jetzt also mit dem "Pfad" in Array-Form den Source-Array anzusprechen?
Cherubim ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 12.02.2012, 15:59  
Erfahrener Benutzer
 
Registriert seit: 10.11.2011
Beiträge: 268
PHP-Kenntnisse:
Fortgeschritten
Solu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt
Leider nein
Solu ist offline   Mit Zitat antworten
Alt 12.02.2012, 16:04  
Neuer Benutzer
 
Registriert seit: 12.02.2012
Beiträge: 4
PHP-Kenntnisse:
Anfänger
Cherubim befindet sich auf einem aufstrebenden Ast
Standard

Okay, versuchen wirs nochmal

Mein Array sieht so aus:


Code:
Array
(
    [0] => Array
        (
            [materials] => Array
                (
                    [0] => Array
                        (
                            [typeID] => 3828
                            [volume] => 2475
                            [price] => 8100.00
                        )
.
.
.
                    [11] => Array
                        (
                            [typeID] => 20185
                            [volume] => 1000000
                            [price] => 999999999.00
                            [materials] => Array
                                (
                                    [0] => Array
                                        (
                                            [typeID] => 21009
                                            [volume] => 110000
                                            [price] => 6269810.0000
                                        )

                                    [1] => Array
                                        (
                                            [typeID] => 21017
                                            [volume] => 140000
                                            [price] => 6456054.0000
                                        )

                                    [2] => Array
                                        (
                                            [typeID] => 21027
                                            [volume] => 1050000
                                            [price] => 4168512.0000
                                        )
                                )
                        )
                )
        )
)
Ich suche jetzt nach "21009" und bekomme als Pfad zurück

Code:
Array
(
    [0] => Array
        (
            [materials] => Array
                (
                    [11] => Array
                        (
                            [0] => typeID
                        )

                )

        )

)
Mit diesem Pfad weiß ich jetzt wo "21009" steht, aber anfangen kann ich damit nichts, da $sourceArray[$Pfad] natürlich keine gültige Syntax ist.
Cherubim ist offline   Mit Zitat antworten
Alt 12.02.2012, 16:16  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Das ist kein Pfad, das ist ein Value aus dem Array. Lass deine Suchfunktion beim Suchen der Werte doch automatisch eine referenz zurückgeben oder erzeuge selbst einen Pfad den du mit einem Array-Walker später als Ziel nutzen kannst.

Code:
/0/materials/11/0
wäre der Pfad
PHP-Code:
function walkToDepth$path$array ) {
   
$d explode('/'$path);
   
$cur $array;
   foreach ( 
$d as $i ) {
      if ( 
strlen($i) > ) {
         
$val is_numeric($i) ? (int)$i $i;
         if ( isset(
$cur[$i]) ) $cur $cur[$i];
         else 
trigger_error('Path is invalid'E_USER_ERROR);
      }
   }
   return 
$cur;

( Theoretisch - habs hier im Forumeditor zusammengetippert )
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 12.02.2012, 16:20  
Neuer Benutzer
 
Registriert seit: 12.02.2012
Beiträge: 4
PHP-Kenntnisse:
Anfänger
Cherubim befindet sich auf einem aufstrebenden Ast
Standard

Das ist defintiv kein Value, das ist nur der Weg zum Key
Aber ist auch egal in diesem Fall. Ich wollte eigentlich nur wissen ob es evtl. eine Syntax gibt mit der man so etwas direkt ansprechen kann.

Bisher habe ich auch schon einige Funtkionen gesehen wie du sie geschrieben hast, so eine Art xpath für Arrays - wird wohl kein Weg dran vorbei gehen.
Danke schonmal
Cherubim ist offline   Mit Zitat antworten
Alt 12.02.2012, 16:25  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
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

Es ist schlicht uns ergreifend eine mehrdimensionale Array-Teilmenge, die aus Schlüsseln und Value besteht. Du solltest erstmal überlegen,

a) was passiert, wenn es mehrere identische Values gibt
b) warum das Array so kompliziert aufgebaut ist.
__________________
--
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   Mit Zitat antworten
Alt 12.02.2012, 16:28  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von Cherubim Beitrag anzeigen
Das ist defintiv kein Value, das ist nur der Weg zum Key
Aber ist auch egal in diesem Fall. Ich wollte eigentlich nur wissen ob es evtl. eine Syntax gibt mit der man so etwas direkt ansprechen kann.

Bisher habe ich auch schon einige Funtkionen gesehen wie du sie geschrieben hast, so eine Art xpath für Arrays - wird wohl kein Weg dran vorbei gehen.
Danke schonmal
Erzeug aus dem Array ein XML-Knoten, dann kannste mit xpath rumschießen.

PHP-Code:
echo $array[1][2][3][4][5][6]; 
ist der php-weg, den man auch per function "autolaufen" kann.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 12.02.2012, 16:47  
Neuer Benutzer
 
Registriert seit: 12.02.2012
Beiträge: 4
PHP-Kenntnisse:
Anfänger
Cherubim befindet sich auf einem aufstrebenden Ast
Standard

Danke, habs hinbekommen mit deiner Xpath Emulation
Cherubim ist offline   Mit Zitat antworten
Alt 12.02.2012, 17:27  
meikel
Gast
 
Beiträge: n/a
Standard

1. Verwende einen rekursiven Arrayiterator auf der Basis arrayobject:
http://www.php.net/manual/en/class.arrayiterator.php

2. verwende ArrayIterator::append
http://www.php.net/manual/en/arrayiterator.append.php

Oder benutze devils eval():

PHP-Code:
$arrayPath '/0/materials/11/0'# aus tr0ys Beispiel
$arrayPath substr($arrayPath1); # ersten / killen
$keystring "['" implode("']['"explode('/'$arrayPath)) . "']";
eval(
'$deinArray' $keystring '= " '$deinWert "); 
  Mit Zitat antworten
Alt 12.02.2012, 17:37  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Zitat:
Zitat von meikel Beitrag anzeigen
PHP-Code:
$arrayPath '/0/materials/11/0'# aus tr0ys Beispiel
$arrayPath substr($arrayPath1); # ersten / killen
$keystring "['" implode("']['"explode('/'$arrayPath)) . "']";
eval(
'$deinArray' $keystring '= " '$deinWert "); 
PHP-Code:
$arrayPath '/0/materials/11/0';
$evalKey "['".str_replace('/',"']['"substr($arrayPath,1))."']";

eval(
'$deinArray'.$evalKey.' = $deinWert;'); 
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Antwort


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
mehrdimensionales array inhalte tauschen pidaman PHP Tipps 2010 18 27.08.2010 16:58
[Erledigt] Problem bei update mit array feldern fulltilt PHP Tipps 2010 6 13.02.2010 00:59
PHPLot von der Datenbank zum mehrdimensionalen Array mannimammut PHP Tipps 2009 1 15.12.2009 10:40
[Erledigt] Tabellen die sich selbst referenzieren Squall PHP Tipps 2009 19 04.08.2009 21:33
[Erledigt] array sortieren PHP Tipps 2004 17 13.05.2009 10:44
Array umwandeln von zwei zu mehrdimensional erselbst PHP Tipps 2009 6 02.04.2009 23:30
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Soapfault: Undefined Property Argi PHP-Fortgeschrittene 0 28.07.2008 11:17
Übersicht aus mehrdimensionalem Array erzeugen Crypi PHP-Fortgeschrittene 0 30.01.2006 13:44
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Array Formatierung PHP Tipps 2006 3 17.01.2006 19:12
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
Array wie auslesen? PHP Tipps 2005 7 07.03.2005 11:43
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:06 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