在PHP的不同点分割字符串

时间:2016-11-20 19:15:40

标签: php arrays string

我需要帮助在PHP中拆分字符串。我正在从另一个网站抓取数据,我试图拆分在各个不同点返回的字符串并将其保存在一个数组中。

以下是我想要拆分的方法。所以我想在日期之后,在每个"("和"之后)"之前分开它。字符。然后将其存储在一个数组中。

字符串示例:

01/11/2016聚合微电力控股有限公司(AMPH)摩根大通全球增长与发展收入公司(JPGI)Murray Income Trust plc(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)",

到目前为止,我已经尝试使用explode来尝试在")"之后分割字符串。字符。

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

如果我转储数组,我会得到以下内容:

array(1){[0] =&gt;字符串(129)&#34; 01/11/2016聚合微电力控股有限公司(AMPH)摩根大通全球增长与发展收入公司(JPGI)Murray Income Trust plc(MUT)&#34; }

更新*

好的,所以我尝试使用以下内容来分隔已经奏效的日期。

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

我现在得到以下内容,但为什么值0显示为空?

array(3){[0] =&gt; string(0)&#34;&#34; [1] =&GT; string(10)&#34; 01/11/2016&#34; [2] =&GT;字符串(116)&#34;聚合微电力控股有限公司(AMPH)摩根大通全球增长&amp; amp;收入公司(JPGI)Murray Income Trust plc(MUT)&#34; }

2 个答案:

答案 0 :(得分:1)

我不了解Preg_match解决方案,但我花了2天的时间,然后通过在不同的地方拆分这个字符串并输出结果来走另一条路线。我的解决方案是: -

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

这让我: // string(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);

这让我:
    // array(6){[0] =&gt; string(12)“Iofina(IOF”[1] =&gt; string(27)“Gamma Comminucations(GAMA”[2] =&gt; string(13)“Ibstock(IBO”[3] =&gt; string(15) “Hurricane(HUR”[4] =&gt; string(12)“Apple(APPL”[5] =&gt; 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)

Gamma Comminucations(GAMA)

Ibstock(IBO)

飓风(HUR)

Apple(APPL)

Melrose(MRO)

答案 1 :(得分: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);