2013-05-20 29 views
1

我有一個像這樣的字符串。爆炸字符串並在每4個實例後創建一個新陣列

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

我希望將字符串分解爲數組,但每隔4個管道實例創建一個新數組。也可以很好地命名密鑰,如下所示。

如:

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 
    ) 

等等......

我如何去實現呢?

回答

4

您正在尋找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>'; 
3

這裏有一個功能的方法:

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

輸出:

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 
     ) 

) 

注:我從字符串刪除尾隨|。你需要這樣做,否則explode會返回一個額外的空白字符串。