我有一个字符串($ c),其中包含以逗号分隔的设置列表。某些设置是独立设置,而其他设置则需要使用等号分隔的子设置。
示例:
$c = "title,author,tax=taxonomy_A,tax=taxonomy_B,date";
我需要将此字符串解析为多维数组($ columns),其输出如下:
$columns = array(
[0] => array( 'title', '' ),
[1] => array( 'author', '' ),
[2] => array( 'tax', 'taxonomy_A' ),
[3] => array( 'tax', 'taxonomy_B' ),
[4] => array( 'date', '' )
)
我试过这个:
$c = "title,author,tax=taxonomy_A,tax=taxonomy_B,meta=custom_field_key";
$c = explode( ',', $c );
$columns = array( explode( '=', $c ) );
但这只是回归:
$columns = array(
[0] => array( 'Array' )
)
我在这里缺少什么?是否应该用不同的功能替换第二次爆炸?
提前致谢!
答案 0 :(得分:2)
foreach(explode(',', "title,author,tax=taxonomy_A,tax=taxonomy_B,date") as $item)
$items[] = array_pad(explode('=', $item), 2, '');
答案 1 :(得分:1)
你需要在第一次爆炸后循环才能完成第二次爆炸:
$c = "title,author,tax=taxonomy_A,tax=taxonomy_B,meta=custom_field_key";
$arr = explode( ',', $c );
$result = array();
foreach($arr as $a) {
array_push($result, explode('=', $a));
}
print_r($result);
答案 2 :(得分:0)
在您的代码中,您不会将第二次爆炸应用于数组的每个元素,而只对整个数组对象应用一次。这会导致数组转换为字符串“Array”,然后通过explode()
运行并产生输出。
相反,您可以使用array_map()
(PHP docu):
function filterArr( $value ) {
return explode( '=', $value )
}
$c = "title,author,tax=taxonomy_A,tax=taxonomy_B,meta=custom_field_key";
$c = explode( ',', $c );
$c = array_map( "filterArr", $c );