Seite 1 von 1

String in Array packen, ich komm nicht drauf...

Verfasst: 18.07.2011, 16:17
von xoni
Ein freunldiches Hallo in die Runde,

Folgendes Problem:
Gegeben sei ein String alà

Code: Alles auswählen

$str = '
#CCC58F
Grünbeige
#D1BC8A
Beige
#D2B773
Sandgelb
#F7BA0B
Signalgelb
#E2B007
Goldgelb
#C89F04
Honiggelb
#E1A100
Maisgelb
#E79C00
Narzissengelb
usw...';
Nun möchte ich diesen String in ein Array packen und zwar
soll das Ergbnis dann so aussehen:

Code: Alles auswählen

Array
(
    [1] => Array
        (
            [name] => Gelbbraun
            [hex] => #fgcd88
        )

    [2] => Array
        (
            [name] => Grün
            [hex] => #006600
        )

    usw.
)

 


)
Ich habe jetzt schon die wildesten Varianten mit foreach etc. probiert, aber es gelingt mir nicht; bin eben kein php-profi.

Kann mir da jemand einen Tipp geben?

Vielen Dank

Verfasst:
von

Verfasst: 18.07.2011, 16:43
von euroexchange.de
Hallo xoni.

Entweder mit explode:

<?
$string = "Das||ist||aber||rot";
$array = explode("||",$string);

foreach ($array as $value)
{
echo $value."<br>";
}
?>

oder mit implode:

$new_string = implode("||", $array);
echo $new_string;

Viel Spaß

Verfasst: 18.07.2011, 16:56
von xoni
Hallo euroexchange.de,

danke für Deine Antwort; das mit im/explode ist mir schon klar, allerdings
fehlt mir in dem String ein Delimiter. Der String umfasst ca. 4000 Zeilen und jetzt händisch ein "Trennzeichen" einzubauen um dann hinterher mit explode arbeiten zu können, ist leider nicht drin.

Andere Ideen?

Verfasst: 18.07.2011, 16:59
von net(t)worker
du kannst doch # als delimiter verwenden, und dann teilste den hexwert und die farbangabe nochmal mit einem explode mit dem zeilenumbruch als trennzeichen.... das # musste dann natürlich wieder davorsetzen... ;-)


oder machst es direkt mit einem regexpr...

Verfasst: 18.07.2011, 18:35
von andreas-flegler
Das hier sollte funktionieren - vorausgesetzt der String enthält Umbrüche als Trennzeichen:

Code: Alles auswählen

preg_match_all&#40;'|&#40;#&#91;A-Fa-f0-9&#93;&#123;6&#125;&#41;\n&#40;.*&#41;\n|m', $str, $arr, PREG_PATTERN_ORDER&#41;;
unset&#40;$arr&#91;0&#93;&#41;;

Verfasst: 18.07.2011, 19:00
von andreas-flegler
Ich korrigiere mich mal selbst:

Code: Alles auswählen

$arr = array&#40;&#41;;
preg_match_all&#40;'|&#40;#&#91;A-Fa-f0-9&#93;&#123;6&#125;&#41;\n&#40;&#91;^\n&#93;*&#41;\n|m', $str, $result, PREG_SET_ORDER&#41;;
foreach&#40; $result as $r &#41; array_push&#40; $arr,  array&#40; "hex" => $r&#91;1&#93;, "name" => $r&#91;2&#93; &#41; &#41;;
Und falls du Probleme mit den Umlauten hast:

Code: Alles auswählen

utf8_decode&#40;$arr&#91;0&#93;&#91;name&#93;&#41;;

Verfasst: 18.07.2011, 19:13
von xoni
Hallo Net(t)worker,

EDIT : DAnke auch an andreas-flegler für seine Antwort

danke für den Anstoss, damit klappt es jetzt...

Code: Alles auswählen

$arr = array&#40;&#41;;

$result_a = explode&#40;"#",$str&#41;;

foreach &#40;$result_a as $value&#41; &#123;
$result_b = explode&#40;"\n",$value&#41;;
$test&#91;'hex'&#93;  = $result_b&#91;0&#93;;
$test&#91;'name'&#93; = $result_b&#91;1&#93;;
$arr&#91;&#93; = $test;
&#125;