2016-06-20 4 views
1

Wie extrahiert man Werte von String getrennt durch |extrahieren Werte von Srting getrennt durch | in php

hier ist meine Zeichenfolge

$var='foo=1478|boo=7854|bar=74125|aaa=74125|bbb=470|ccc=74125|ddd=1200|'; 

i

$foo=1478 
$boo=7854 
$ccc=74125 
+0

explodieren auf | –

+0

mit der explode-Funktion zweimal, Was ist die Logik des Speicherns ??? Die ersten beiden sind verständlich, aber was ist mit der letzten? '$ c'? –

+0

Es sieht so aus, als könntest du mit 'explode ('|', $ var) beginnen;' ... Aber du musst mehr Forschungsaufwand zeigen. –

Antwort

1

Natürlich würde jeder Körper schlagen die explode Route:

$var = 'foo=1478|boo=7854|bar=74125|aaa=74125|bbb=470|ccc=74125|ddd=1200|'; 
foreach(array_filter(explode('|', $var)) as $e){ 
    list($key, $value) = explode('=', $e); 
    ${$key} = $value; 
} 

Auch ein anderer wäre Rohre, zu Ampersand zu konvertieren, so dass es mit parse_str interpretiert werden kann:

parse_str(str_replace('|', '&', $var), $data); 
extract($data); 
echo $foo; 

Beide würden das gleiche produzieren. Ich würde jedoch mit Variablen Variablen wegbleiben, es würde sich entscheiden, mit Arrays zu gehen.

+0

Ich habe auch etwas wie zu dem ersten gemacht. –

+0

@RivnatNasah eine andere Variante wäre, Regex zu verwenden 'preg_split ('/ \ | + /', $ var)' – Ghost

+0

Das ist genial, ich liebe Regex, aber kann nicht tun. –

0

Explode die Zeichenfolge von | speichern müssen und Sie werden den anderen Wert als Array erhalten, die durch | getrennt ist. Fügen Sie jetzt die $ vor jedem Wert und echo sie, um zu sehen, was Sie wollen.

$var = 'foo=1478|boo=7854|bar=74125|aaa=74125|bbb=470|ccc=74125|ddd=1200|'; 
$arr = explode("|", $var); 
$arr = array_filter($arr); 
foreach($arr as $val){ 
    echo "$".$val."<br/>"; 
} 

Sie erhalten:

$foo=1478 
$boo=7854 
$bar=74125 
$aaa=74125 
$bbb=470 
$ccc=74125 
$ddd=1200 

OR, wenn man sich in dem $foo Variable gespeichert werden soll und zeigt den Wert nur dann tun Sie dies:

$var = 'foo=1478|boo=7854|bar=74125|aaa=74125|bbb=470|ccc=74125|ddd=1200|'; 
$arr = explode("|", $var); 
$arr = array_filter($arr); 
foreach($arr as $val){ 
    $sub = explode("=", $val); 
    $$sub[0] = $sub[1]; 
} 

echo $foo; //1478 
0

Verwenden explode Funktion des breche deine Saite.

$array = explode("|", $var); 
print_r($array); 
0

Sie PHP-Variable variable Konzept verwenden, um Ihr Ziel zu erreichen:

Versuchen Sie folgendes:

<?php 
$var='foo=1478|boo=7854|bar=74125|aaa=74125|bbb=470|ccc=74125|ddd=1200|'; 
$vars=explode("|",$var); 
foreach($vars as $key=>$value){ 
    if(!empty($value)){ 
     $varcol=explode("=",$value); 
     $varname=$varcol[0]; 
     $varvalue=$varcol[1]; 
     $$varname=$varvalue;  //In this line we use $$ i.e. variable variable concept 
    } 
} 
echo $foo; 

Ich hoffe, das funktioniert für Sie ....

0

Sie explode verwenden können für | mit array_filter, um leere Elemente aus dem Array zu entfernen und das Ergebnis an array_map mit einem Referenzarray zu übergeben.

Innerhalb Callback müssen Sie wieder explode für = und speichern Sie diese in ref-Array.

dort nach der Verwendung extract zum Erstellen von Variablen.

$var='foo=1478|boo=7854|bar=74125|aaa=74125|bbb=470|ccc=74125|ddd=1200|'; 
$result = array(); 
$x = array_map(function($arr) use(&$result) { 
    list($key, $value) = explode('=', $arr); 
    $result[$key] = $value; 
    return [$key => $value]; 
}, array_filter(explode('|', $var))); 
extract($result); 
Verwandte Themen