从textarea中获取数组并将其转换为数组

时间:2017-05-09 14:57:52

标签: php arrays

我需要用户在textarea中输入一个数组,这个数组可能是大数组,我试图将其序列化并将其保存在DB中但是它失败了,

这是我的代码:

if( strpos( $_POST['textarea_array'], 'array' ) !== FALSE ) {

     $temp_serialized = serialize( $_POST['textarea_array'] );

     if( ( $temp_unserialized = @unserialize( $temp_serialized ) !== FALSE ) 
         && is_array( $temp_unserialized ) ) {

         /* Condition FAILED */

         $temp_json = json_encode( $temp_unserialized );
         $final_value = base64_encode( $temp_json );

     }

}

在textarea中输入一个简单或复杂数组的示例,其中包含每个键的子数组

array( 
   'x_sub_array' => array( 
       'x_1' => 'X 1', 
       'x_2' => 'X 2', 
       'x_3' => 'X 3', 
   );
   'x_2' => 'X 2', 
   'x_3' => 'X 3', 
);

1 个答案:

答案 0 :(得分:1)

首先,有更简单的方法来传递数据。但如果这是绝对唯一的方式,不妨直截了当地回答。 (如果您的用户严格遵守格式......)

if(isset($_POST['textarea_array'])){

    $raw = $_POST['textarea_array'];

    //Parse the array section
    $start = strpos($raw, "(");
    $end = strpos($raw, ")");
    $full = substr($raw,$start+1,$end - ($start+1));

    //Remove quotations
    $full = str_replace("'","",$full);

    //Divide string into array of segments `key=>value` as one segment
    $segments = explode(",", $full);

    foreach($segments as $segment){
        //Divide each segment `key=>value` to a temp array
        //Index 0 will hold the key, Index 1 will hold value

        $array_part = explode("=>",$segment);

        //Remove spaces
        $key = trim($array_part[0]);
        $value = trim($array_part[1]);

        //insert into associative array
        $final[$key] = $value;
    }

    //$final now has your associative array
    echo json_encode($final);
}

同样,还有更好的选择。

- 如何让用户通过AJAX传递json对象?

- 或者用户如何输入每个元素并用换行符分隔?

但从不依赖序列化或eval,尤其是因为您不希望用户访问您的php页面。