尝试搜索,但没有什么是我正在寻找的。 p>
我有一个看起来像这样的字符串:
$string = "sku1,2|sku2,5";
我想把它转换成一个多维数组,最终看起来像这样:
Array
(
[0] => Array
(
[sku] => sku1
[qty] => 2
)
[1] => Array
(
[sku] => sku2
[qty] => 5
)
)
到目前为止,我已尝试使用:
explode(',',$string);
哪个是正确的想法,但它没有考虑管道分隔符知道何时转到下一个数组。
答案 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];
}