0

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

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

提前致谢!

4

3 回答 3

2
foreach(explode(',', "title,author,tax=taxonomy_A,tax=taxonomy_B,date") as $item)
        $items[] = array_pad(explode('=', $item), 2, '');
于 2012-06-27T15:36:47.013 回答
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);
于 2012-06-27T15:29:55.623 回答
0

在您的代码中,您不会对数组的每个元素应用第二次爆炸,而是对整个数组对象应用一次。这会导致数组转换为字符串“Array”,然后运行该字符串explode()并生成您的输出。

相反,您可以使用array_map()PHP 文档):

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 );
于 2012-06-27T15:33:04.490 回答