当分隔符是可选的时,如何将字符串解析为多维数组

时间:2012-06-27 15:24:40

标签: php string parsing multidimensional-array

我有一个字符串($ 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' )
)

我在这里缺少什么?是否应该用不同的功能替换第二次爆炸?

提前致谢!

3 个答案:

答案 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 );