PHP使用括号分隔的字符串中的键名创建多维关联数组
发布时间:2020-12-13 21:54:11 所属栏目:PHP教程 来源:网络整理
导读:我有一个字符串,括号中包含可变数量的键名,例如: $str = '[key][subkey][otherkey]'; 我需要创建一个多维数组,该数组具有在字符串中表示的相同键($value只是一个不重要的字符串值): $arr = [ 'key' = [ 'subkey' = [ 'otherkey' = $value ] ] ]; 或者如果
我有一个字符串,括号中包含可变数量的键名,例如:
$str = '[key][subkey][otherkey]'; 我需要创建一个多维数组,该数组具有在字符串中表示的相同键($value只是一个不重要的字符串值): $arr = [ 'key' => [ 'subkey' => [ 'otherkey' => $value ] ] ]; 或者如果您更喜欢这种其他符号: $arr['key']['subkey']['otherkey'] = $value; 理想情况下,我想像对待字符串那样追加数组键,但据我所知,这是不可能的.我不认为array_push()可以在这里提供帮助.起初我以为我可以使用正则表达式从字符串中获取方括号中的值: preg_match_all( '/[([^]]*)]/',$str,$has_keys,PREG_PATTERN_ORDER ); 但我只有一个没有任何层次结构的非关联数组,这对我没用. 所以我提出了以下几点: $str = '[key][subkey][otherkey]'; $value = 'my_value'; $arr = []; preg_match_all( '/[([^]]*)]/',PREG_PATTERN_ORDER ); if ( isset( $has_keys[1] ) ) { $keys = $has_keys[1]; $k = count( $keys ); if ( $k > 1 ) { for ( $i=0; $i<$k-1; $i++ ) { $arr[$keys[$i]] = walk_keys( $keys,$i+1,$value ); } } else { $arr[$keys[0]] = $value; } $arr = array_slice( $arr,1 ); } var_dump($arr); function walk_keys( $keys,$i,$value ) { $a = ''; if ( isset( $keys[$i+1] ) ) { $a[$keys[$i]] = walk_keys( $keys,$value ); } else { $a[$keys[$i]] = $value; } return $a; } 现在,这“工作”(如果字符串有不同数量的’键’),但对我来说它看起来很丑陋而且过于复杂.有一个更好的方法吗? 解决方法
当我看到preg_ *和这样一个简单的模式时,我总是担心.如果你对$str的格式有信心,我可能会选择这样的东西
<?php // initialize variables $str = '[key][subkey][otherkey]'; $val = 'my value'; $arr = []; // Get the keys we want to assign $keys = explode('][',trim($str,'[]')); // Get a reference to where we start $curr = &$arr; // Loops over keys foreach($keys as $key) { // get the reference for this key $curr = &$curr[$key]; } // Assign the value to our last reference $curr = $val; // visualize the output,so we know its right var_dump($arr); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |