Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-拆分字符串_Php - Fatal编程技术网

PHP-拆分字符串

PHP-拆分字符串,php,Php,我想把这个字符串分成几个部分,比如“Source:Web”、“Pics:1”。。。在我的网站中使用它。 从“Lat:”和“Lon:”中,我只需要提取数字 <cap> Source: Web | Pics: 1 | Frame: 2 | Date: 4-25-2011 | On: App | Lat: 51.2222 | Lon: 7.6555 </cap> 资料来源:网页图片:1帧:2日期:2011年4月25日日期:App Lat:51.2222 Lon:7.

我想把这个字符串分成几个部分,比如“Source:Web”、“Pics:1”。。。在我的网站中使用它。 从“Lat:”和“Lon:”中,我只需要提取数字

    <cap>
Source: Web | Pics: 1 | Frame: 2 | Date: 4-25-2011 | On: App | Lat: 51.2222 | Lon: 7.6555
</cap>

资料来源:网页图片:1帧:2日期:2011年4月25日日期:App Lat:51.2222 Lon:7.6555
最好的方法是什么?我读过关于explode()的书,但我没有让它起作用。
干杯你说得对。这是最好的功能。

试试这个。它将拆分它们并创建关联数组:

$string = "Source: Web | Pics: 1 | Frame: 2 | Date: 4-25-2011 | On: App | Lat: 51.2222 | Lon: 7.6555";
$pieces = explode("|", $string);
print_r($pieces);
$string = 'Source: Web | Pics: 1 | Frame: 2 | Date: 4-25-2011 | On: App | Lat: 51.2222 | Lon: 7.6555';
$list = explode('|', $string);
$assoc = array();
foreach($list as $part) {
    list($key, $val) = explode(':', $part);
    $assoc[trim($key)] = trim($val);
}

print_r($assoc);

下面是我使用
explode
()

用法

echo $finalArray['Lon']; //yields '7.6555'

$val=这是一个荒谬的单行程序,可能永远都不应该使用,但它不使用循环(我讨厌循环)。我也喜欢练习我的REs

$str = 'Source: Web | Pics: 1 | Frame: 2 | Date: 4-25-2011 | On: App | Lat: 51.2222 | Lon: 7.6555';
preg_match( sprintf( '~%s~', implode(array_map( function($val){ if ($val) return sprintf( '%1$s:\s(?P<%1$s>.*?)(?:(?:\s\|\s)|(?:$))', $val ); }, preg_split( '~:.*?(?:(?:\s\|\s)|(?:$))~', $str ) ) ) ), $str, $m );
print_r($m);

这真的不是一个好答案。从他的问题中,他了解explode(),但无法使其正常工作。如果你打算建议他使用它,你应该提供一个例子,就像其他答案一样感谢大家提供的众多示例和信息。我真的很感激!这将为您提供一个混合了键和值的数组。糟糕的形式。但是+1用于使用herdoc语法^^^这对问题有什么影响:)它可能有助于s/t,因为这是目前考虑标记的唯一答案。尚不清楚OP是要拆分包含标签还是独占标签。但是我当然同意分割部分不是,我要做的^^^我不需要运行代码,我可以确切地告诉(正如我之前所说)你最终会得到什么。谁想通过交替的数值来检索它们的值?看来你在为程序员做更多的工作
$array['lon']
$array[11]
容易得多,除非你能记住每个数字代表什么。我要再次重申,这从来都不是一个更好的方法。也许你应该澄清一下,你的意思是字符串包含所有显示的文本,包括标记,还是只包含标记内的内部文本,因为有些人考虑了标记,有些人没有。来吧。用你文章的标题我得到了一个答案。同样,回去接受以前的一些答案,或者停止问他们。
<?php    
    $str = "Source: Web | Pics: 1 | Frame: 2 | Date: 4-25-2011 | On: App | Lat: 51.2222 | Lon: 7.6555";
    $arr = explode(" | ", $str);
    foreach ($arr as $item){
        $arr2 = explode(": ", $item);
        $finalArray[$arr2[0]]=$arr2[1];
    }
    print_r($finalArray);
?>
Array
(
    [Source] => Web
    [Pics] => 1
    [Frame] => 2
    [Date] => 4-25-2011
    [On] => App
    [Lat] => 51.2222
    [Lon] => 7.6555
)
echo $finalArray['Lon']; //yields '7.6555'
$val =<<<END
<cap>
    Source: Web | Pics: 1 | Frame: 2 | Date: 4-25-2011 | On: App | Lat: 51.2222 | Lon: 7.6555
</cap>
END;

$bits = split("[:|]", $val);
$lat = trim($bits[11]);
$lon = trim($bits[13]);
$str = 'Source: Web | Pics: 1 | Frame: 2 | Date: 4-25-2011 | On: App | Lat: 51.2222 | Lon: 7.6555';
preg_match( sprintf( '~%s~', implode(array_map( function($val){ if ($val) return sprintf( '%1$s:\s(?P<%1$s>.*?)(?:(?:\s\|\s)|(?:$))', $val ); }, preg_split( '~:.*?(?:(?:\s\|\s)|(?:$))~', $str ) ) ) ), $str, $m );
print_r($m);
Array
(
    [Source] => Web
    [Pics] => 1
    [Frame] => 2
    [Date] => 4-25-2011
    [On] => App
    [Lat] => 51.2222
    [Lon] => 7.6555
)