1

I've got the following string which is inside $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\

I did the following to split every line:

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

Which gives me this result:

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
)

Now I want to create a multidimensional array which would look like this:

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"
    )
)

How can I do this?

I've tried further splitting the values like this:

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

But this returns:

ArrayArrayArrayArrayArrayArrayArray
2
  • 4
    here: $varpijp .= explode('|', $varback); is the error. You shouldn't concatanate (.=) the returned arrays, but add it to an array maybe: $varpijp[] = explode('|', $varback); and then do further processing Commented Apr 11, 2018 at 13:26
  • Please give me $vars string value proper. Commented Apr 11, 2018 at 13:30

1 Answer 1

2

You are concatenate as string .= an array. So the array is converted to a string "Array", with a "Array to string conversion" warning.

You could use a combination of array_map(), array_column() to convert your initial array to your expected array:

$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>';

Outputs:

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
        )

)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.