【问题标题】:How to parse a string into a multidimensional array when the separator is optional分隔符可选时如何将字符串解析为多维数组
【发布时间】:2012-06-29 02:13:15
【问题描述】:

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

我在这里缺少什么?是否应该用不同的函数替换第二个爆炸?

提前致谢!

【问题讨论】:

    标签: php string parsing multidimensional-array


    【解决方案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);
    

    【讨论】:

    • 感谢您的快速回复。我选择了 Parahat 的解决方案,但也感谢您的帮助!
    【解决方案2】:

    在您的代码中,您不会对数组的每个元素应用第二次爆炸,而是对整个数组对象应用一次。这会导致数组转换为字符串“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 );
    

    【讨论】:

    • 感谢您的明确解释。我选择了 Parahat 的解决方案,但也感谢您的帮助!
    【解决方案3】:
    foreach(explode(',', "title,author,tax=taxonomy_A,tax=taxonomy_B,date") as $item)
            $items[] = array_pad(explode('=', $item), 2, '');
    

    【讨论】:

    • 非常优雅...这是我将使用的。谢谢一百万!
    猜你喜欢
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多