使用逗号和管道将字符串转换为多维数组

时间:2015-07-24 21:12:46

标签: php arrays string multidimensional-array

尝试搜索,但没有什么是我正在寻找的。

我有一个看起来像这样的字符串:

$string = "sku1,2|sku2,5";

我想把它转换成一个多维数组,最终看起来像这样:

Array
(
    [0] => Array
        (
            [sku] => sku1
            [qty] => 2
        )

    [1] => Array
        (
            [sku] => sku2
            [qty] => 5
        )

)

到目前为止,我已尝试使用:

explode(',',$string);

哪个是正确的想法,但它没有考虑管道分隔符知道何时转到下一个数组。

3 个答案:

答案 0 :(得分:1)

你是正确的,但你必须从管道开始。所以首先explode()通过管道你的刺痛,然后用array_map()遍历每个元素并用逗号爆炸它。

要获取关联键,只需array_combine()你的爆炸数组和你想要的键,例如。

$array = array_map(function($v){
    return array_combine(["sku", "qty"], explode(",", $v));
}, explode("|", $string));

print_r($array);

答案 1 :(得分:1)

我甚至不愿意寻找|或手动遍历任何事情。您可以使用仅包含少量填充符的preg_match_all生成所需的数组:

preg_match_all(
    "/(?<sku>\w+),(?<qty>\d+)\K/",
    $string, $array, PREG_SET_ORDER
);

这只是提取由\w+逗号分隔的字母数字\d+和数字,条目的任意组合。

答案 2 :(得分:0)

不是最优雅的解决方案,但这对您有用:

$string = "sku1,2|sku2,5";

$explodePipe = explode('|', $string);

$resultArray = array();

foreach ($explodePipe as $explodedPipe) {
    $explodeSku = explode(',', $explodedPipe);
    $resultArray[]['sku'] = $explodeSku[0];
    $resultArray[]['qty'] = $explodeSku[1];
}