Webstatt.org - Community seit 2006 - 2012 (2024?)

Mehrdimensionale Arrays in Eindimensionalem speichern

user-137
15.11.2010 15: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

Avatar user-125
18.11.2010 15: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'zwinkern, array( array('T1', 'T2'zwinkern, 'T3'zwinkern

);

$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

Liebe user-125y aka user-125 aka dionysos
Avatar user-125
19.11.2010 09: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"
}

Liebe user-125y aka user-125 aka dionysos
Avatar user-271
21.11.2010 15: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;
}

#!/bin/bash
traurig){ neutral:& };:
user-137
22.11.2010 12:04

wow, danke funktioniert lächeln

Avatar user-125
24.11.2010 17:51

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

Liebe user-125y aka user-125 aka dionysos
Avatar user-271
26.11.2010 18:11

ah die funktoin hab ich gesucht: array_walk_recursive lächeln
schankedoen

#!/bin/bash
traurig){ neutral:& };: