【问题标题】:Converting a string into a multi-dimensional array with commas and pipes使用逗号和管道将字符串转换为多维数组
【发布时间】:2015-07-24 21:12:45
【问题描述】:

尝试搜索,但没有什么是我想要的。

我有一个如下所示的字符串:

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

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

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

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

)

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

explode(',',$string);

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

【问题讨论】:

  • 密钥是刚刚给出的还是来自任何地方? (sku, qty)
  • 如果你的意思是 [sku] 和 [qty] 我是故意命名的。因此,您在删除之前的示例是正确的,只是需要一个额外的名称来命名这些键,并且应该是完美的。但是,即使我不这样做,我也可以通过 [0] 和 [1] 访问它。我只是将其命名为使其更具可读性。

标签: php arrays string multidimensional-array


【解决方案1】:

我什至不会费心寻找| 或手动遍历任何东西。您可以使用仅包含几个填充符的 preg_match_all 生成所需的数组:

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

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

【讨论】:

  • 输出似乎比预期的要多:[0] => [sku] => sku1 [1] => sku1 [qty] => 2 [2] => 2跨度>
  • @dmotors:是的,它在数字上将键加倍(“一些填充符”)。正则表达式方法对进一步约束/断言输入很有意义。对于其他/更简单的方法(例如parse_str),请参阅PHP Split Delimited String into Key/Value Pairs (Associative Array)
  • 明白。这不是问题我想我忽略了你所说的“一些填充物”的意思。
【解决方案2】:

你是在正确的道路上,但你必须从管道开始。所以首先explode()你被管道刺痛,然后用array_map()遍历每个元素并用逗号将其分解。

要获得关联键,只需 array_combine() 带有您想要的键的分解数组,例如

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

print_r($array);

【讨论】:

    【解决方案3】:

    不是最优雅的解决方案,但这应该适合你:

    $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];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 2012-05-10
      • 2019-02-13
      • 2012-11-17
      相关资源
      最近更新 更多