2017-01-20 3 views
0

Wenn ich eine Zeichenfolge wie diese haben,Wie bekomme ich ein Array in einem String in PHP?

$my_string="array('red','blue')"; 

Wie kann ich wandeln diese in eine reale Array?

Beispiel. :

$my_array=array('red','blue'); 
+0

Zu diesem Zweck können Sie 'eval' Funktion ... aber seine Verwendung wird nicht empfohlen. – Pipe

+1

@ Rizier123, 'Array ('rot', 'blau')' ist keine Ausgabe von print_r ... ich denke nicht, dass es eine doppelte Frage ist. – Pipe

+2

Die größere Frage ist, warum Sie solch eine Schnur an erster Stelle haben. Wenn Sie Werte serialisieren möchten, sollten Sie ein anderes Format wählen, das leicht unserialisierbar ist. z.B. JSON. – deceze

Antwort

2

DO EVAL NICHT. Das ist ein schrecklicher Overkill und sehr wahrscheinlich extrem unsicher.

Während dies nicht der ist BEST Art und Weise, dies zu tun (wie in Frage Kommentaren erwähnt), können Sie diese unten Funktion genau das zu tun, was Sie brauchen.

Wie es funktioniert:

Es nutzt Regex zu finden und teilen Sie die Zeichenfolge auf diesen Layouts basieren, wird das Array preg_split spaltete verwendet, die eine regex explode verson der beliebtesten ist.

Nach der Aufteilung enthält das Array einige leere Werte. Verwenden Sie einfach array_filter, um diese leeren Werte zu entfernen.

so:

// Explode string based on regex detection of: 
    // 
    // (^\h*[a-z]*\h*\(\h*') 
    // 1) a-z text with spaces around it and then an opening bracket 
    //^denotes the start of the string 
    // | denotes a regex OR operator. 
    // \h denotes whitespace, * denotes zero or more times. 
    // 
    // ('\h*,\h*') 
    // 2) or on '),(' with possible spaces around it 
    // 
    // ('\h*\)\h*$) 
    // 3) or on the final trailing '), again with possible spaces. 
    // $ denotes the end of the string 
    // the /i denotes case insensitive. 

function makeArray($string){ 

    $stringParts = preg_split("/(^\h*[a-z]*\h*\(\h*')|('\h*,\h*')|('\h*\)\h*$)/i",$string); 
    // now remove empty array values. 
    $stringParts = array_filter($stringParts); 
    return $stringParts; 
    } 

Usage:

//input 
$myString = " array('red','blue')"; 
//action 
$array = makeArray($myString); 
//output 
print_r($array); 

Output:

Array (
[1] => red
[2] => blue
)

Beispiel 2:

$myString = " array('red','blue','horses', 'crabs (apples)', '(trapdoor)', '<strong>works</strong>', '436')"; 
$array = makeArray($myString); 
print_r($array); 

Output:

Array (
[1] => red
[2] => blue
[3 ] => Pferde
[4] => Krabben (ca les)
[5] => (Falltür)
[6] =><strong>works</strong>
[7] => 436
)

Offensichtlich ist die regex brauchen kann leichte Zwicken auf der Grundlage Ihrer genaue Umstände, aber das ist ein sehr guter Ausgangspunkt ...

Reference Question/Answers

Verwandte Themen