如何在PHP

时间:2018-04-11 13:21:30

标签: php arrays multidimensional-array

我在$vars内有以下字符串:

Formaat : 60 cm | Kleur : century oak | Prijs: 45,00\
Formaat : 60 cm | Kleur : dark oak | Prijs: 45,00\
Formaat : 60 cm | Kleur : grey | Prijs: 45,00\
Formaat : 80 cm | Kleur : century oak | Prijs: 75,00\
Formaat : 80 cm | Kleur : dark oak | Prijs: 75,00\
Formaat : 80 cm | Kleur : grey | Prijs: 75,00\

我做了以下操作来分割每一行:

$vars =  $artikel['variabelen'];
$variabelebackslash = explode('\\', $vars);
echo '<pre>';
print_r($variabelebackslash);
echo '</pre>';

这给了我这个结果:

Array
(
    [0] => Formaat : 60 cm | Kleur : century oak | Prijs: 45,00
    [1] => Formaat : 60 cm | Kleur : dark oak | Prijs: 45,00
    [2] => Formaat : 60 cm | Kleur : grey | Prijs: 45,00
    [3] => Formaat : 80 cm | Kleur : century oak | Prijs: 75,00
    [4] => Formaat : 80 cm | Kleur : dark oak | Prijs: 75,00
    [5] => Formaat : 80 cm | Kleur : grey | Prijs: 75,00
)

现在我想创建一个多维数组,如下所示:

Array
(
    array
    (
        Formaat => "60cm",
        Kleur => "century oak",
        Prijs => "45,00"
    )
    array
    (
        Formaat => "60cm",
        Kleur => "dark oak",
        Prijs => "45,00"
    )
    array
    (
        Formaat => "60cm",
        Kleur => "grey",
        Prijs => "45,00"
    )
    array
    (
        Formaat => "80cm",
        Kleur => "century oak",
        Prijs => "75,00"
    )
    array
    (
        Formaat => "80cm",
        Kleur => "dark oak",
        Prijs => "75,00"
    )
    array
    (
        Formaat => "80cm",
        Kleur => "grey",
        Prijs => "75,00"
    )
)

我该怎么做?

我已尝试进一步拆分这样的值:

foreach($variabelebackslash as $varback){
    $varpijp .= explode('|', $varback);
}
echo '<pre>';
print_r($varpijp);
echo '</pre>';

但是这会回来:

ArrayArrayArrayArrayArrayArrayArray

1 个答案:

答案 0 :(得分:2)

您将串联为字符串.=和数组。因此,数组将转换为字符串&#34;数组&#34;,并使用&#34;数组进行字符串转换&#34; 警告。

您可以使用array_map()array_column()的组合将初始数组转换为预期的数组:

$variabelebackslash = array(
     'Formaat : 60 cm | Kleur : century oak | Prijs: 45,00',
     'Formaat : 60 cm | Kleur : dark oak | Prijs: 45,00',
     'Formaat : 60 cm | Kleur : grey | Prijs: 45,00',
     'Formaat : 80 cm | Kleur : century oak | Prijs: 75,00',
     'Formaat : 80 cm | Kleur : dark oak | Prijs: 75,00',
     'Formaat : 80 cm | Kleur : grey | Prijs: 75,00'
);


// Foreach element of the array,
$varpijp = array_map(function($val){
    // split using | and trim values.
    $values = array_map('trim', explode('|', $val));

    // foreach elements,
    $keyvals = array_map(function($val) {
        // explode using : and trim them:
        return array_map('trim', explode(':', $val));
    }, $values);

    // create associative array using $keyvals array:
    return array_column($keyvals, 1, 0);
}, $variabelebackslash);


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

输出:

Array
(
    [0] => Array
        (
            [Formaat] => 60 cm
            [Kleur] => century oak
            [Prijs] => 45,00
        )

    [1] => Array
        (
            [Formaat] => 60 cm
            [Kleur] => dark oak
            [Prijs] => 45,00
        )

    [2] => Array
        (
            [Formaat] => 60 cm
            [Kleur] => grey
            [Prijs] => 45,00
        )

    [3] => Array
        (
            [Formaat] => 80 cm
            [Kleur] => century oak
            [Prijs] => 75,00
        )

    [4] => Array
        (
            [Formaat] => 80 cm
            [Kleur] => dark oak
            [Prijs] => 75,00
        )

    [5] => Array
        (
            [Formaat] => 80 cm
            [Kleur] => grey
            [Prijs] => 75,00
        )

)