Willkommen in der Webstatt Zum Webstatt Blog und Stories
BNightSpeeder am 15.11.10 16:03

Hey,

ich muss ein Mehrdimensionales Array in ein Eindimensionales Array umwandeln, die Reihenfolge ist egal, es geht eigt. nur darum alle Values zu übertragen.

Dazu hab ich folgende Funktion geschrieben:

function MultiToMono($Array) {
foreach($Array as $key => $value) {
if (is_array($value)) {
$NewArray[] = array_merge($NewArray, MultiToMono($value));
}
else {
$NewArray[] = $value;
}

return $NewArray;
}
}


Leider nichts vernünftiges ausgegeben. Aus meinem Mehrdimensionalem Array bleibt nur ein Value über.

Ich sehe meinen Logikfehler einfach nicht, bin dankbar für Hilfen.

- Gruß BNS

netcup.de Warum gibt es hier Werbung?
bastey bastey am 18.11.10 16:37

Hier, ne Lösung mit ner Klasse. Kann das nur mit ner Funktion iwi net lösen. Hab da wohl nen Brett vorm Kopf:

<?PHP

$testArr = array(
'Value', array('M1', 'M2'), array( array('T1', 'T2'), 'T3')

);

$test2Str = 'abc';

class makeOneArr{
private $newArr = array();

public function makeSimply($arr){

$this->newArr = array();

if(is_array($arr)){
self::forEachArr($arr);
}else{
$this->newArr[] = $arr;
}


return $this->newArr;

}

private function forEachArr($arr){
foreach($arr as $newArr){
if(is_array($newArr)){
self::forEachArr($newArr);
}else{
$this->newArr[] = $newArr;
}
}
}

}

$moep = new makeOneArr;

print var_dump($moep->makeSimply($testArr));

print var_dump($moep->makeSimply($test2Str));
?>

hier auch zufinden

bastey bastey am 19.11.10 10:43

Achso, Ausgabe:
array(6) {
[0]=>
string(5) "Value"
[1]=>
string(2) "M1"
[2]=>
string(2) "M2"
[3]=>
string(2) "T1"
[4]=>
string(2) "T2"
[5]=>
string(2) "T3"
}
array(1) {
[0]=>
string(3) "abc"
}

nuit nuit am 21.11.10 16:23

natuerlich geht das in einer funktion...dein problem ist array_merge...array_merge preserved die keys..d.h. alle keys die schon existieren werden ueberschrieben.
nachdem mir auf die schnelle keine brauchbare funktion eingefallen ist, hab ich deine ein bisschen veraendert:
function MultiToMono($Array) {
if(is_array($Array) {
foreach($Array as $value) {
if (is_array($value)) {
$buff = MultiToMono($value);
foreach($buff as $val) $NewArray[] = $val;
} else {
$NewArray[] = $value;
}
}
} else return array($Array)

return $NewArray;
}

BNightSpeeder am 22.11.10 13:04

wow, danke funktioniert :)

bastey bastey am 24.11.10 18:51

Noch mehr (sogar kürzere) Varianten gibts hier: http://osob.de/fo

nuit nuit am 26.11.10 19:11

ah die funktoin hab ich gesucht: array_walk_recursive :)
schankedoen

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt