爆炸字符串并在每4个实例后创建一个新数组

I have a string like this.

$string = "title1|1.99|www.website.com|www.website.com/img1.jpg|title2|5.99|www.website2.com|www.website2.com/img2.jpg|title3|1.99|www.website3.com|www.website3.com/img3.jpg|";

I wish to explode the string into an array but create a new array every 4 instances of the pipe. also would be nice to name the keys as well like below.

eg:

    array (
            [title] => title1
            [price] => 1.99
            [url] => www.website.com
            [gallery] => www.website.com/img1.jpg
  )

    array (
            [title] => title2
            [price] => 5.99
            [url] => www.website2.com
            [gallery] => www.website2.com/img2.jpg
    )

And so on...

How can I go about achieving this?

You're looking for array_chunk():

$string = 'title1|1.99|www.website.com|www.website.com/img1.jpg|title2|5.99|www.website2.com|www.website2.com/img2.jpg|title3|1.99|www.website3.com|www.website3.com/img3.jpg';

$keys = array('title', 'price', 'url', 'gallery');

$array = explode('|', $string);
$array = array_chunk($array, 4);

$array = array_map(function($array) use ($keys) {
    return array_combine($keys, $array);
}, $array);

echo '<pre>', print_r($array, true), '</pre>';

Here's a functional approach:

$string = "title1|1.99|www.website.com|www.website.com/img1.jpg|title2|5.99|www.website2.com|www.website2.com/img2.jpg|title3|1.99|www.website3.com|www.website3.com/img3.jpg";

$array = array_map(function($array) {
    return array(
        'title' => $array[0],
        'price' => $array[1],
        'url' => $array[2],
        'gallery' => $array[3]
    );
}, array_chunk(explode('|', $string), 4));

print_r($array);

Output:

Array
(
    [0] => Array
        (
            [title] => title1
            [price] => 1.99
            [url] => www.website.com
            [gallery] => www.website.com/img1.jpg
        )

    [1] => Array
        (
            [title] => title2
            [price] => 5.99
            [url] => www.website2.com
            [gallery] => www.website2.com/img2.jpg
        )

    [2] => Array
        (
            [title] => title3
            [price] => 1.99
            [url] => www.website3.com
            [gallery] => www.website3.com/img3.jpg
        )

)

Note: I removed the trailing | from the string. You'll need to do that or else explode returns an extra blank string.