0

文字列をコードとして機能させるにはどうすればよいですか?

たとえば、この文字列を配列として解析したいのですが、

$config = '
    "allowable_tags" => "<p>",
    "span_regex" => null, 
    "allow_nbsp" => true, 
    "allow_class" => false
';

それで、

function tidy($config = null){

    $default = array(
        "allowable_tags" => null,
        "span_regex" => null, 
        "allow_nbsp" => true, 
        "allow_class" => false
    );

    $config = array($config);

    # Loop the array.
    foreach($default as $key => $value)
    {
        # Set the variable.
        $$key = set_variable($config,$key)? set_variable($config,$key):$value;
    }

    return $allowable_tags;
}


var_dump(tidy($config));

その後、結果としてこれを取得します、

<p>

それは実行可能ですか?

従属関数、

function set_variable($array = array(),$key,$params = array())
{
    # If $params is not an array, let's make it array with one value of former $params.
    if(!is_array($params)) $params = array($params);
    if(!is_array($array)) parse_str($array, $array);

    # When you want a variable to return a boolean, this will return true or false.
    if(in_array('boolean', $params)) return isset($array[$key]) && $array[$key] === true ? true : false;

    # This will regard '0' as a string.
    # Return value or 0 as a string.
    elseif(in_array('zero_to_string', $params)) return isset($array[$key]) && ($array[$key] == '0') ? trim($array[$key]) : null;

    # Return null as string if 'null_to_string' is set.
    elseif(in_array('null_to_string', $params)) return isset($array[$key]) && !empty($array[$key]) ? trim($array[$key]) : 'null';

    # Check if the key is an array.
    elseif(isset($array[$key]) && !empty($array[$key]) && is_array($array[$key])) return isset($array[$key]) && !empty($array[$key]) ? $array[$key] : null;

    # This will regard '0', empty space as falsey.
    # Return value or null.
    else return isset($array[$key]) && !empty($array[$key]) ? trim($array[$key]) : null;
}
4

3 に答える 3

2

構成変数の文字列表現を配列に解析するカスタム関数を作成する代わりに、JSONなどの既存の形式を使用しないのはなぜですか?次に、json_decode()を呼び出すだけで、配列を取り戻すことができます。また、これがユーザーが送信/入力した構成値の場合、JSONは広く知られており、コードが実行されないため、習得が容易で、ある程度安全です。

于 2012-04-11T20:30:03.907 に答える
2

そもそもどうやってその文字列を取得しますか?

設定をデータベースか何かに保存していると思います。この場合、PHPにメソッドが組み込まれているシリアル化を使用する必要があります。

<?php

// normal PHP array
$config = array(
    "allowable_tags" => "<p>",
    "span_regex" => null, 
    "allow_nbsp" => true, 
    "allow_class" => false
);

// array serialized as string
$string = serialize($config);

echo $string ."\n\n";
# => a:4:{s:14:"allowable_tags";s:3:"<p>";s:10:"span_regex";N;s:10:"allow_nbsp";b:1;s:11:"allow_class";b:0;}

// converting serialized string back to array
$array = unserialize($string);

print_r($array);
/*
    Array
    (
        [allowable_tags] => <p>
        [span_regex] => 
        [allow_nbsp] => 1
        [allow_class] => 
    )
*/

ここでideoneで動作するのを見てください


編集

Jonathan Kuhnが推奨するように、これを処理するのjson_encode()json_decode()も最適です。

于 2012-04-11T20:30:30.593 に答える
-1

私はそれが理想的だとは思いませんが、それはいくつかの基盤です:

function str2array($str)
{
    $array = explode(',', $str);
    $rArray = array();
    foreach ($array as $items) {
        $i = explode('=>', $items);
        if (preg_match('/^"*(.*?)"$/', trim($i[1]), $iWithoutQuotes)) {
            $i[1] = $iWithoutQuotes[1];
        }
        $rArray[substr(trim($i[0]), 1, -1)] = trim($i[1]);
    }

    return $rArray;
}
于 2012-04-11T20:32:26.817 に答える