Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将字符串转换为数组_Php - Fatal编程技术网

PHP将字符串转换为数组

PHP将字符串转换为数组,php,Php,这可能会被问很多次,但我的情况有点不同 让我从头开始 $ck_data = db_select('ckeditor_settings', 'cs') ->fields('cs', array('settings')) ->condition('name', 'Advanced', '=') ->execute() ->fetchAssoc(); var_dump($ck_data);

这可能会被问很多次,但我的情况有点不同

让我从头开始

$ck_data = db_select('ckeditor_settings', 'cs')
           ->fields('cs', array('settings'))
           ->condition('name', 'Advanced', '=')
           ->execute()
           ->fetchAssoc();
var_dump($ck_data);
会给我

array(1) {
  ["settings"]=>
  string(2144) "a:33:{s:2:"ss";s:1:"2";s:7:"toolbar";s:606:"[
    ['Source'],
    ['Cut','Copy','Paste','PasteText','PasteFromWord','-','SpellChecker','Scayt'],
    ['Undo','Redo','Find','Replace','-','SelectAll'],
    ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar'],
    ['Maximize','ShowBlocks'],
    '/',
    ['Format'],
    ['Bold','Italic','Underline','Strike','-','Subscript','Superscript','-','RemoveFormat'],
    ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
    ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl'],
    ['Link','Unlink','Anchor','Linkit','LinkToNode','LinkToMenu']
]";s:6:"expand";s:1:"t";s:7:"default";s:1:"t";s:11:"show_toggle";s:1:"t";s:7:"uicolor";s:7:"default";s:12:"uicolor_user";s:7:"default";s:5:"width";s:4:"100%";s:4:"lang";s:2:"en";s:9:"auto_lang";s:1:"t";s:18:"language_direction";s:7:"default";s:15:"allowed_content";s:1:"t";s:19:"extraAllowedContent";s:0:"";s:10:"enter_mode";s:1:"p";s:16:"shift_enter_mode";s:2:"br";s:11:"font_format";s:35:"p;div;pre;address;h1;h2;h3;h4;h5;h6";s:17:"custom_formatting";s:1:"f";s:10:"formatting";a:1:{s:25:"custom_formatting_options";a:6:{s:6:"indent";s:6:"indent";s:15:"breakBeforeOpen";s:15:"breakBeforeOpen";s:14:"breakAfterOpen";s:14:"breakAfterOpen";s:15:"breakAfterClose";s:15:"breakAfterClose";s:16:"breakBeforeClose";i:0;s:10:"pre_indent";i:0;}}s:8:"css_mode";s:4:"none";s:8:"css_path";s:0:"";s:9:"css_style";s:5:"theme";s:11:"styles_path";s:0:"";s:11:"filebrowser";s:4:"none";s:17:"filebrowser_image";s:0:"";s:17:"filebrowser_flash";s:0:"";s:13:"UserFilesPath";s:5:"%b%f/";s:21:"UserFilesAbsolutePath";s:7:"%d%b%f/";s:21:"forcePasteAsPlainText";s:1:"t";s:13:"html_entities";s:1:"f";s:17:"scayt_autoStartup";s:1:"t";s:15:"theme_config_js";s:1:"f";s:7:"js_conf";s:0:"";s:11:"loadPlugins";a:1:{s:12:"drupalbreaks";a:5:{s:4:"name";s:12:"drupalbreaks";s:4:"desc";s:51:"Plugin for inserting Drupal teaser and page breaks.";s:4:"path";s:25:"%plugin_dir%drupalbreaks/";s:7:"buttons";a:1:{s:11:"DrupalBreak";a:2:{s:5:"label";s:11:"DrupalBreak";s:4:"icon";s:22:"images/drupalbreak.png";}}s:7:"default";s:1:"t";}}}"
}
现在我想要的是获取
工具栏的值

$ck_settings = unserialize($ck_data['settings']);
$ck_plugins = $ck_settings['toolbar'];
var_dump($ck_plugins);
将返回

string(606) "[
    ['Source'],
    ['Cut','Copy','Paste','PasteText','PasteFromWord','-','SpellChecker','Scayt'],
    ['Undo','Redo','Find','Replace','-','SelectAll'],
    ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar'],
    ['Maximize','ShowBlocks'],
    '/',
    ['Format'],
    ['Bold','Italic','Underline','Strike','-','Subscript','Superscript','-','RemoveFormat'],
    ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
    ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl'],
    ['Link','Unlink','Anchor','Linkit','LinkToNode','LinkToMenu']
]"

我现在的问题是如何将
$ck_plugins
从字符串转换为数组?

存储该字符串的方式很奇怪,但它是一个看起来像PHP数组定义的字符串:

eval("\$ck_plugins = $ck_plugins;");
print_r($ck_plugins);

如果您可以控制数据存储,您可能应该将单个条目存储在一个表中,或者将整个内容序列化或更好地存储在JSON中。

查看上的PHP文档,我已经尝试过了,但似乎不是一个好方法。是的,没错。将字符串转换为数组是您所要求的。是的……我认为这是经过几个小时的试验后最接近的解决方案。感谢AbraCadaverIt,如果只存储序列化的(或整个列)会更好,但它看起来像是要存储为PHP数组定义的源。@AbraCadaver-你能告诉我
eval(\$ck\u plugins=$ck\u plugins;)是什么吗是什么?我知道
eval
用于“评估”代码,但我不太明白它在这种情况下是如何工作的……它使用
$ck\u plugins
中存储的[[]、[]、[]、[]类型字符串,该字符串与PHP中的数组定义相同,并将其作为代码进行评估,以便将数组分配给变量
$ck\u plugins
。您可以将
“\$ck\u plugins=$ck\u plugins;”
替换为
“\$result=$ck\u plugins;”
,然后使用
$result