2017-01-20 10 views
0

私はこのような文字列を持っている場合は、PHPで文字列の配列を取得するには?

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

がどのように私はこれが本当の配列に変換することができますか?

例。 :

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

、あなたが使用することができます 'eval'機能...しかし、その使用は推奨されていません。 – Pipe

+1

@ Rizier123、 'array( 'red'、 'blue')'はprint_rの出力ではありません...私はその重複した質問とは思わない。 – Pipe

+2

大きな問題は、最初にそのような文字列がある理由です。値をシリアライズする場合は、すぐに判読不能な別のフォーマットを選択する必要があります。例えばJSON。 – deceze

答えて

2

EVALを使用しないでください。それは恐ろしい過度のもので、おそらく非常に危険です。

これは(質問のコメントに記載されているように)これを行う方法ではありませんが、これを以下の関数を使用して必要なものを正確に行うことができます。

仕組み:

は、それが配列のexplodeより人気のverson正規表現であるpreg_splitを使用して分割され、これらのレイアウトに基づいて文字列を検索するために正規表現を使用して分割します。

分割された配列には空白の値が含まれるため、単に空白の値を削除する場合はarray_filterを使用します。

そう:

// 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; 
    } 

用途:

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

出力:

アレイ(
[1] =>赤
[2] =>青

例2:

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

出力:

アレイ(
[1] =>赤
[2] =>ブルー
[3 ] =>馬
[4] =>カニ(app LES)
[5] =>(トラップドア)
[6] =><strong>works</strong>
[7] => 436

明らか

正規表現はあなたに基づいてわずかな微調整を必要があるかもしれません正確な状況が、これは非常に良い出発点である...この目的のために

Reference Question/Answers

関連する問題