| 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! |
 |

06-07-2011, 15:52
|
|
der_meier_hans
Registrierter Benutzer
|
|
Registriert seit: Mar 2007
Beiträge: 161
|
|
array aufteilen
Hallo!
Gibt es eine einfache Möglichkeit eine Array ab einer bestimmten Position aufzuteilen?
$foo = array(
'aa' => 'bmw',
'bb' => 'audi',
'cc' => 'opel',
'dd' => 'Benz',
'ee' => 'Toyota',
'ff' => 'Corsa',
'gg' => 'Skoda',
'hh' => 'Volvo',
'ii' => 'Seat',
'jj' => 'Fiat',
'kk' => 'Vw',
'll' => 'Kia'
);
Nun möchte ich zu einem die Paramter VOR dem 'hh' => 'Volvo' und NACH dem einsammeln. Ich suche nach einer array Function, gibt es sowas.
Lösungsansatz:
PHP-Code:
foreach ($foo as $code => $name) {
if ($code !== 'hh') {
$foo1[] = array(
'type' => $name,
'code' => $code
);
} else {
break;
}
}
Problem, wie bekomme ich die Daten nach dem key 'hh'?
Danke
|

06-07-2011, 15:58
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
Steht 'hh' immer an der gleichen Position? Dann wäre array_slice() denke ich die einfachste Variante.
__________________
This is what happens when an unstoppable force meets an immovable object.
|

06-07-2011, 16:16
|
|
der_meier_hans
Registrierter Benutzer
|
|
Registriert seit: Mar 2007
Beiträge: 161
|
|
Hi!
Leider nicht, die Position sind unterschiedlich!
LG
|

06-07-2011, 16:31
|
|
medium22
Registrierter Benutzer
|
|
Registriert seit: Mar 2006
Beiträge: 306
|
|
Dann zuerst nach der Position suchen ( PHP: array_search - Manual) und dann obiges...
Edit: Argh! Die Hitze bringt mich noch um! Verzeiht! *g*
Man kann die Position auch ermitteln wenn man das Array einmal bis zu der Stelle durchläuft. Macht aber keinen Sinn, wenn du sowieso alles haben willst, dann kann man das auch alles in einem Durchlauf machen.
Geändert von medium22 (06-07-2011 um 16:44 Uhr)
|

06-07-2011, 16:34
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
array_search gibt aber doch den 'key' des gesuchten Elements zurück. D.h. in dem Fall kommt 'hh' als Ergebnis zurück und das bringt ja nicht wirklich was...
__________________
This is what happens when an unstoppable force meets an immovable object.
|

06-07-2011, 16:34
|
|
Quetschi
PHP Expert
|
|
Registriert seit: Dec 2004
Beiträge: 2.759
|
|
@medium
*kopfkratz* - array_search liefert den Schlüssel für einen Wert im Array - den kennt er ja bereits. Für array_slice bräuchte er jedoch die Position des key-value-Paares im Array. Die bekommt er mit array_search nicht.
Da mir auf Anhieb keine "elegante" Lösung mit den Array-Funktionen einfällt:
PHP-Code:
$part = "before-hh"; foreach ($foo as $code => $name) { if ($code == 'hh') { $part = "after-hh"; } $fooNew[$part][] = array( 'type' => $name, 'code' => $code );
}
Quick&Dirty sowie ungetestet.
__________________
Drelingdo
Krabonse
Simmannamando
Geändert von Quetschi (06-07-2011 um 16:38 Uhr)
|

06-07-2011, 16:46
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
So, hab mal was gebastelt... Ist einfach ne Kombination aus den verschiedenen Array-Funktionen
PHP-Code:
$hh_index = array_search('hh', array_keys($array)); $before_hh = array_slice($array, 0, $hh_index); $after_hh = array_slice($array, $hh_index + 1);
Code:
$before_hh = Array ([aa] => bmw, [bb] => audi, [cc] => opel, [dd] => Benz, [ee] => Toyota, [ff] => Corsa, [gg] => Skoda)
$after_hh = Array([ii] => Seat, [jj] => Fiat, [kk] => Vw, [ll] => Kia)
Wenn du den 'hh' index noch dabei haben willst, musst du entweder die +1 wegmachen oder beim anderen hinzufügen. Wie das ganze funktioniert ist denke ich ersichtlich...
array_keys liefert alle keys zurück, und zwar in der reihenfolge, wie sie im array vorhanden sind. Daher kann ich darin dann nach dem 'hh' key suchen und erhalte dementsprechend die Position von 'hh' im alten Array als Integer. Den kann ich dann für array_slice ganz normal nutzen.
Etwas "von hinten durchs Knie", aber es klappt, egal wo 'hh' steht.
__________________
This is what happens when an unstoppable force meets an immovable object.
Geändert von ApoY2k (06-07-2011 um 16:53 Uhr)
|

06-07-2011, 16:52
|
|
Quetschi
PHP Expert
|
|
Registriert seit: Dec 2004
Beiträge: 2.759
|
|
Zitat:
Zitat von ApoY2k
Etwas "von hinten durchs Knie", aber es klappt, egal wo 'hh' steht.
|
Oder von hinten durch die Brust ins Auge
Ne - ist deutlich besser als der Vorschlag von mir
__________________
Drelingdo
Krabonse
Simmannamando
|

06-07-2011, 16:55
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
1 cannon fired, 0.732 sparrows dead.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

06-07-2011, 16:57
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
Kommt da noch mehr oder soll mir das einfach sagen, dass ich mal wieder Mist zusammenprogrammiert hab?
__________________
This is what happens when an unstoppable force meets an immovable object.
|

06-07-2011, 17:00
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Das war weniger Kritik an deinem Vorschlag, als am kompletten Vorgehen ...
Ggf. kann man die Unterscheidung auch einfach bei der Verarbeitung der Daten machen o.ä. - aber etwas mehr sinnvolle Hintergrund-Infos zum Vorhaben hat der Frager ja wieder mal nicht geliefert
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

06-07-2011, 17:00
|
 |
ApoY2k
Registrierter Benutzer
|
|
Registriert seit: Nov 2006
Beiträge: 290
|
|
Ja gut, das stimmt wohl.
Aber wer weiß woher die Daten kommen...
__________________
This is what happens when an unstoppable force meets an immovable object.
|

06-07-2011, 17:03
|
|
Quetschi
PHP Expert
|
|
Registriert seit: Dec 2004
Beiträge: 2.759
|
|
Ich hab das editing meines Posts dahingehend wieder abgebrochen, als ich den Vorschlag von @ApoY2k per Mail reinkommen sehen hab. Der Aufbau des Arrays kam mir auch ziemlich fragwürdig vor.
__________________
Drelingdo
Krabonse
Simmannamando
|
|
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
|