2014-02-18 3 views
0

У меня есть эта строкаПоместить содержимое строки в массиве PHP

string(2091) " 


"roots" => array(
    array(
     "driver"  => "LocalFileSystem", // driver for accessing file system (REQUIRED) 
     "path"   => "../files/",   // path to files (REQUIRED) 
     //"URL"   => dirname($_SERVER["PHP_SELF"]) . "/../files/", // URL to files (REQUIRED) 
     "accessControl" => "access" ,   // disable and hide dot starting files (OPTIONAL) 
     "alias" => "Root", 
     //"uploadDeny" => array("all"), 
     "attributes" => array(
    array(
     "pattern" => "/\manuali$/", //You can also set permissions for file types by adding, for example, <b>.jpg</b> inside pattern. 
     // "pattern" =>"/\PROVA$/", 
     "read" => true, 
     "write" => false, 
     "locked" => true, 
    ), 
    array(
     "pattern" => "/rapporti$/", //You can also set permissions for file types by adding, for example, <b>.jpg</b> inside pattern. 
     // "pattern" =>"/\PROVA$/", 
     "read" => true, 
     "write" => true, 
     "locked" => true, 
    ) 
    [...] 
    "; 

я хочу, чтобы поместить в массив всех значений строки. Пример:

array(


"roots" => array(
    array(
     "driver"  => "LocalFileSystem", // driver for accessing file system (REQUIRED) 
     "path"   => "../files/",   // path to files (REQUIRED) 
     //"URL"   => dirname($_SERVER["PHP_SELF"]) . "/../files/", // URL to files (REQUIRED) 
     "accessControl" => "access" ,   // disable and hide dot starting files (OPTIONAL) 
     "alias" => "Root", 
     //"uploadDeny" => array("all"), 
     "attributes" => array(
    array(
     "pattern" => "/\manuali$/", //You can also set permissions for file types by adding, for example, <b>.jpg</b> inside pattern. 
     // "pattern" =>"/\PROVA$/", 
     "read" => true, 
     "write" => false, 
     "locked" => true, 
    ), 
    array(
     "pattern" => "/rapporti$/", //You can also set permissions for file types by adding, for example, <b>.jpg</b> inside pattern. 
     // "pattern" =>"/\PROVA$/", 
     "read" => true, 
     "write" => true, 
     "locked" => true, 
    ) 
    [...] 
    ); 

я попробовал str_split() implode() array_push() ... но каждая функция поместить строку в массив в этом режиме array(string(" ")) я хочу поставить в этом режиме array(" ").

Thanks

+1

Что производит эта строка в первую очередь?Разве вы не можете просто сериализовать его вместо того, чтобы просто печатать его как строку, а затем пытаться разобрать строку обратно в сложную структуру. – Anigel

+0

строка - это чтение из файла ex. $ хх = file_get_contents ('out.txt'); – napster3world

+1

Вопрос по-прежнему заключается в том, что генерирует эту строку в этом файле. Было бы разумнее, если бы этот файл просто содержал сериализованную структуру, а не строку. – Anigel

ответ

1

Если ваша строка обрабатывается и вы не возражаете против возможных инъекций, вы можете просто указать eval ваше представление массива.

Например, если строка находится в $arrayStr и вы хотите создать массив $myArray от:

$arrayStr = '"roots" => array (...)'; 
eval('$myArray = array(' . $arrayStr . ');'); 

Обратите внимание, что если $arrayStr не совсем контроллер от вас от поколения к конверсии, то очень рискованный, поскольку все в нем будет оцениваться.

Лучшим решением для обмена целым массивом между частями вашего приложения было бы заранее указать serialize(), чтобы создать строковое представление вашего массива/объекта, который может быть сохранен, а затем неэтериализовать его, когда вам это нужно в его первоначальной форме ,

+0

вы можете объяснить мне, как работает (в данном случае) функция serialize()? – napster3world

+0

нет жаль, что вы решили мой вопрос ... Спасибо! – napster3world

1

Есть два основных метода, о которых я могу думать.

Одним из них является использование какой-либо сложной петли для соответствия шаблону с использованием preg_match. Вы можете разделить строку на каждую строку, используя explode и \n, чтобы преобразовать ее в массив (каждой строки), пропустить через каждую строку и использовать сопоставление (регулярное выражение), чтобы выяснить, что с ним делать.

Второй способ невероятно опасен, поэтому я настоятельно рекомендую вам не использовать его, но php имеет собственную функцию eval, которая позволит PHP интерпретировать строку как фактический PHP.

Вам нужно будет добавить переменное назначение внутри строки, например.

$arrayString = "$var = array(' . $arrayString . ');"; 

А потом

eval($arrayString); 

Однако, вы действительно не хотите делать это, если вы можете. Из PHP документации:

Внимание

Конструкт язык Eval() очень опасно, потому что она позволяет выполнение произвольного кода PHP. Поэтому его использование не рекомендуется. Если вы тщательно проверили, что нет другого выбора, кроме как использовать эту конструкцию , обратите особое внимание на то, чтобы не передавать никакие предоставленные пользователем данные без надлежащей проверки.

+0

ваше решение генерирует строку() = массив (.. то же самое с другой функцией, это моя проблема .. eval не работает нормально .. но большое вам спасибо! – napster3world

Смежные вопросы