如何将包含特定格式数据的字符串转换为PHP中的关联数组数组?

myzjeezk  于 2023-06-21  发布在  PHP
关注(0)|答案(2)|浏览(75)

我有一个如下格式的字符串:

$data = "sku=32300905,color=Dark Brown|sku=32300899,color=Blue|sku=32300900,color=Grey|sku=32300914,color=light Brown";

我想把这个字符串转换成一个关联数组的数组,如下所示:

Array
(
    [0] => Array
        (
            [sku] => 32300905
            [color] => Dark Brown
        )

    [1] => Array
        (
            [sku] => 32300899
            [color] => Blue
        )

    [2] => Array
        (
            [sku] => 32300900
            [color] => 
        )

    [3] => Array
        (
            [sku] => 32300914
            [color] => light Brown
        )

    [4] => Array
        (
            [sku] => 12345678
            [color] => 
        )

)

在PHP中实现这种转换最有效的方法是什么?

beq87vna

beq87vna1#

你可以尝试这种方式得到你的回应

$data = "sku=32300905,color=Dark Brown|sku=32300899,color=Blue|sku=32300900,color=Grey|sku=32300914,color=light Brown";

$convertToArray = explode('|', $data);
$result = array_map(function ($pair) {

    list($key, $value) = explode(',', $pair);
    return array_combine(explode('=', $key), explode('=', $value));

}, $convertToArray);

echo '<pre>';
print_r($result);
echo '</pre>';

或者你也可以这样做

$convertToArray = explode('|', $data);
        
        $result = array_map(function ($item) {
            $sku = null;
            $color = null;
        
            $newArray = explode(',', $item);
            // print_r($newArray);
            
            foreach ($newArray as $field) {
                $parts = explode('=', $field);
                if ($parts[0] === 'sku') {
                    $sku = $parts[1];
                } elseif ($parts[0] === 'color') {
                    $color = $parts[1];
                }
            }
        
            return ['sku' => $sku, 'color' => $color];
        }, $convertToArray);
        
                

                echo '<pre>';
                print_r($result);
                echo '</pre>';
mdfafbf1

mdfafbf12#

或者你可以使用一个简单的正则表达式:

$matches = [];
preg_match_all('/sku=([0-9]+),color=([^|]*)/', $data, $matches);

$output = [];
foreach ($matches[1] as $k => $code) {
    $output[] = [
        'sku' => 'color',
        $code => $matches[2][$k],
    ];
}

(假设您的SKU代码都是数字,并且颜色值不包含“|'字符,但可以包含逗号)

相关问题