Keenora
Hi Leute
Ich hab folgendes Problem:
Ich hab ein beliebig tiefes Array, dessen assoziative Keys vom Namen her alle bearbeitet werden müssen. Und zwar sieht ein Key immer wie folgt aus:
| php: |
1:
|
<?php $array['!KeyName'] ?> |
|
Der neue Key soll dann so aussehen:
| php: |
1:
|
<?php $array['keyName'] ?> |
|
Sprich, alle führenden Rufzeichen weg und camelize. Wie kann ich die Arrays am besten komplett durchlaufen und dies ersetzen?
mfg
~Kee
marIus
am einfachsten geht es wenn du mittels foreach alle elemente des arrays durchgehst, und die werte in ein neues array speicherst. davor bearbeitest du die keys einfach entsprechend
Keenora
Die Frage, wie es geht, ist ja beantwortet. Die Frage, welche die beste Möglichkeit ist, jedoch nicht. Mittels einer UserFunc, oder vlt. gibts nen direkten Filter irgendwie, oder halt die Hammermethode
moonsword
dachte das geht auch mit array_map...unter umständen geht das irgendwie, wenn nicht, dann fehlt das echt
im prinzip ist es die gleiche lösung wie marius, nur nicht per foreach durchgegangen...
| php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
|
<?php $arr = array(
'!Keten' => 1,
'!Nochwas' => 2,
'!IchBins' => 3
);
$arr = array_combine(
array_map(
create_function(
'$e',
'$e{1} = strtolower($e{1});return str_replace("!","",$e);'
),array_keys($arr)
),array_values($arr)
); ?> |
|
ab php5.3 lässt sich auch einfach lcfirst machen als funktion...d.h. die create_function methode würde sich ändern
edit: geht auch recht gut, wenn du das array umdrehst, dann mit einem array_map bearbeitest und dan nochmal drehst
| php: |
1:
2:
3:
4:
5:
6:
7:
8:
|
<?php $arr = array_flip(
array_map(
create_function(
'$e',
'$e{1} = strtolower($e{1});return str_replace("!","",$e);'
),array_flip($arr)
)
); ?> |
|
edit: :bäh hab vergessen das beliebig tief zu machen ^^ dann wird die flip methode nicht funktionieren und bei der andere müsste man sich das auch überlegen? wie sieht es mit dem ganzen rekursiv aus? also durch die beliebige tiefe hätte ich wirklich eien rekursive funktion geschrieben...und wenn das element ein array ist, dann wird halt nochmal die funktion aufgerufen mit dem sub-array...innen drinnen hätte ich dann aber mit einem foreach geprüft...das extra array muss man sich überlegen, ob das sinnvoll ist...aber ich denke schon, weil du sonst ja elemente nicht überschreibst, weil du den key veränderst...
man könnte ein unset machen, um das element vorher rauszulöschen...aber ein neues array zu initialisieren ist auch nicht schwer
so meinte ich das:
| php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
<?php function array_workon($arr) {
$buff = array();
foreach($arr as $key=>$elem) {
$buff[lcfirst(str_replace('!','',$key)] = (
is_array($elem) ? array_workon($elem) : $elem
);
}
return $buff;
} ?> |
|
was sinnvolleres fällt mir auch nicht ein
Keenora
Wunderbare Lösungsansätze!
Vielen Dank Moonsword!
Ich denke ich werd ein Gemisch aus beidem machen. Da sich gerade rausgestellt hat, dass die Werte, die ich per Array bekomme, manchmal sogar noch anders aussehen könnten. Ein hoch auf die Sharepoint WebServices -___-
Whatever...also vielen Dank

Damit werde ich super weiterkommen
~Kee