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.