2016-11-20 3 views
-1

Ich brauche Hilfe bei der Aufteilung von Strings in PHP. Ich scracke gerade Daten von einer anderen Website und ich versuche, die Zeichenfolge, die an verschiedenen verschiedenen Punkten zurückgegeben wird, aufzuteilen und in einem Array zu speichern.Teilen eines Strings in PHP an verschiedenen Stellen

Unten ist, wie ich es teilen möchten. Also möchte ich es nach dem Datum aufteilen, vor jedem "(" und nach dem ")" -Zeichen. Dann speichern Sie es in einem Array.

Beispiel String:

01/11/2016 aggregierte Micro Power Holdings plc (AMPH) JPMorgan Global Growth & Income plc (JPGI) Murray Income Trust plc (MUT)

Beispiel Endergebnis

"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)", 

Bisher habe ich versucht, die Zeichenfolge nach dem „)“ Zeichen zu verwenden, explodieren, um zu versuchen und gespalten.

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

Wenn ich Dump das Array i folgendes erhalten:

Array (1) {[0] => string (129) "2016.01.11 aggregierte Micro Power Holdings plc (AMPH) JPMorgan global Growth & Income plc (JPGI) Murray Income Trust plc (MUT) "}

Update *

ok so habe ich versucht, mit der nach dem Zeitpunkt, zu trennen, die gearbeitet hat.

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

Ich bekomme jetzt folgendes, aber warum ist Wert 0 leer?

Array (3) {[0] => string (0) "" [1] => string (10) "01/11/2016" [2] => string (116) "Aggregierte Micro Power Holdings plc (AMPH) JPMorgan Global Growth & Income plc (JPGI) Murray Income Trust plc (MUT)“}

Antwort

1

I didn‘ Ich verstehe die Preg_match-Lösungen, aber ich habe 2 Tage damit verbracht und bin eine andere Route gegangen, indem ich diese Zeichenfolge einfach auf diff aufgeteilt habe Orten und geben die Ergebnisse aus.Meine Lösung ist: -

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

Das gibt mir: // 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); 

Das gibt mir:
// Array (6) {[0] => string (12) "Iofina (IOF" [1] => string (27) "Gamma-Verkündungen (GAMA) [2] => string (13)" Ibstock (IBO) [3] => string (15) "Hurricane (HUR" [4] => Zeichenfolge (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 } ?> 

Die oben zeigt die folgenden

22/11/2016

Iofina (IOF)

Gamma Comminucations (GAMA)

Ibstock (IBO)

Hurricane (HUR)

Apfel (APPL)

Melrose (MRO)

0

Sie können diese mit regex erreichen:

Siehe 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); 
Verwandte Themen