2016-11-20 41 views
-1

我需要幫助分割PHP中的字符串。我目前正在從另一個網站抓取數據,我試圖拆分在各個不同點返回的字符串並將其保存在一個數組中。在各個點分割PHP中的字符串

以下是我想如何拆分它。所以我想在日期之後,在每個「(」和之後的「)」字符之前進行分割。然後將其存儲在一個數組中。字符串的

例子:

2016年1月11日聚集的微米電力控股有限公司(苯丙胺),摩根大通全球成長&收入PLC(JPGI)穆雷收入信託有限公司(MUT)

例最終的結果

"date" => "01/11/2016", 
"company" => "Aggregated Micro Power Holdings plc", 
"epic" => "(AMPH)", 
"company" => "JPMorgan Global Growth & Income plc", 
"epic" => "(JPGI)", 
"company" => "Murray Income Trust plc", 
"epic" => "(MUT)", 

到目前爲止,我已經嘗試過用爆炸來嘗試和「)」字符後拆分字符串。

$string = "01/11/2016 Aggregated Micro Power Holdings plc (AMPH) JPMorgan Global Growth & Income plc (JPGI) Murray Income Trust plc (MUT)"; 

$array = explode(") ", $string); 

echo '<pre>' . var_dump($array) . '</pre>'; 

如果我轉儲陣列I得到以下:

陣列(1){[0] =>串(129)「2016年1月11日聚集微功率控股有限公司(AMPH)摩根全球成長&收入PLC(JPGI)穆雷收入信託有限公司(MUT)「}

更新*

行,所以我已經使用以下分離已經工作的日期嘗試。

$spilt = preg_split('/(\d{2}\/\d{2}\/\d{4})/', $string, null, PREG_SPLIT_DELIM_CAPTURE); 

我現在得到以下,但爲什麼值0顯示爲空?

array(3){[0] => string(0)「」[1] => string(10)「01/11/2016」[2] => string(116)「Aggregated Micro Power Holdings PLC(苯丙胺),摩根大通全球成長&收入PLC(JPGI)穆雷收入信託有限公司(MUT)」}

回答

1

我沒有」不瞭解Preg_match解決方案,但我花了2天的時間,並通過在diff處分割此字符串而走上了另一條路線不同的地方並輸出結果。我的解決方案是: -

$string = '22/11/2016 Iofina (IOF) Gamma Comminucations (GAMA) Ibstock (IBO) Hurricane (HUR) Apple (APPL) Melrose (MRO)'; 

// Splits the string and returns the date 
$date = preg_split('(\s.*)', $string , null, PREG_SPLIT_DELIM_CAPTURE); 
$date = implode('', $date); 

這給了我: //串(10) 「22/11/2016」

// Removes the date and splits the string after every) bracket 
$companies = preg_split('([\)])', str_replace(range(0, 9), '', str_replace('/', '', $string)) , null, PREG_SPLIT_DELIM_CAPTURE); 

這給了我:
//數組(6){[0] => string(12)「Iofina(IOF」[1] => string(27)「Gamma Comminucations(GAMA」[2] => string(13)「Ibstock(IBO」 => string(15)「Hurricane(HUR」[4] => string(12)「Apple(APPL」[5] => string(13)「Melrose(MRO)}

<h3><?php echo $date; ?></h3> 
<?php foreach (array_filter($companies) as $key => $value) { ?> 

    <?php echo '<p>' . $value . ')' . '</p>'; ?>  

<?php } ?> 

上面顯示以下

22/11/2016

Iofina(IOF)

伽瑪Comminucations(GAMA)

伊布斯托克(IBO)

颶風(HUR)

Apple(APPL)

Melrose(MRO)

0

你可以做到這一點使用正則表達式:

this

$string = "01/11/2016 Aggregated Micro Power Holdings plc (AMPH) JPMorgan Global Growth & Income plc (JPGI) Murray Income Trust plc (MUT)"; 
preg_match_all('/(?P<date>\d+\/\d+\/\d+)\s|\G\s*(?P<company>.*?)\s*\((?P<epic>.*?)\)/', $string, $matches, PREG_SET_ORDER); 
var_dump($matches);