如何在 PHP 中对字符串进行切片?
Posted
技术标签:
【中文标题】如何在 PHP 中对字符串进行切片?【英文标题】:How to slice a string in PHP? 【发布时间】:2011-12-03 14:10:49 【问题描述】:好的,所以我得到了这个字符串:
"MICROSOFT CORP CIK#: 0000789019 (see all company filings)"
我想切断"CORP"
位之后的所有内容。我将如何在 php 中执行此操作?我习惯了 Python,所以我不确定这是如何完成的。
说清楚,这是我想要的输出:
"MICROSOFT CORP"
我正在尝试:
$companyname = substr($companyname, 0, strpos($companyname, " CIK"));
我什么也没看到。
这是我的完整代码:
<?php
include 'simple_html_dom.php';
$html = file_get_html('http://www.sec.gov/cgi-bin/browse-edgar?company=&match=&CIK=MSFT&filenum=&State=&Country=&SIC=&owner=exclude&Find=Find+Companies&action=getcompany');
$companyname = $html->find('span[class=companyName]', 0);
$companyname = substr($companyname, 0, strpos($companyname, " CIK#")+5);
$bizadd = $html->find('div[class="mailer"]');
echo $companyname;
echo "<br />";
foreach ($bizadd as $value)
$addvals = $value->find('span[class="mailerAddress"]');
echo "<br />";
foreach ($addvals as $value)
echo $value;
echo "<br />";
?>
【问题讨论】:
安德鲁,在您修改后查看我更新的答案。 【参考方案1】:我来到这个页面寻找一个切片slice($start, $end)
方法,但只找到了特定于案例的解决方案。
就我而言,我只有索引(开始和结束)。需要length
来分割字符串似乎很愚蠢。所以我写了一个切片函数。它模仿了 javascript 的 slice 方法。
// str_slice(string $str, int $start [, int $end])
function str_slice()
$args = func_get_args();
switch (count($args))
case 1:
return $args[0];
case 2:
$str = $args[0];
$str_length = strlen($str);
$start = $args[1];
if ($start < 0)
if ($start >= - $str_length)
$start = $str_length - abs($start);
else
$start = 0;
else if ($start >= $str_length)
$start = $str_length;
$length = $str_length - $start;
return substr($str, $start, $length);
case 3:
$str = $args[0];
$str_length = strlen($str);
$start = $args[1];
$end = $args[2];
if ($start >= $str_length)
return "";
if ($start < 0)
if ($start < - $str_length)
$start = 0;
else
$start = $str_length - abs($start);
if ($end <= $start)
return "";
if ($end > $str_length)
$end = $str_length;
$length = $end - $start;
return substr($str, $start, $length);
return null;
var_dump( str_slice("abcdefghijklmnopqrstuvwxyz") ); // "abcdefghijklmnopqrstuvwxyz"
var_dump( str_slice("abcdefghijklmnopqrstuvwxyz", 5) ); // "fghijklmnopqrstuvwxyz"
var_dump( str_slice("abcdefghijklmnopqrstuvwxyz", -5) ); // "vwxyz"
var_dump( str_slice("abcdefghijklmnopqrstuvwxyz", 40) ); // ""
var_dump( str_slice("abcdefghijklmnopqrstuvwxyz", -40) ); // "abcdefghijklmnopqrstuvwxyz"
var_dump( str_slice("abcdefghijklmnopqrstuvwxyz", 5, 10) ); // "fghij"
var_dump( str_slice("abcdefghijklmnopqrstuvwxyz", 5, 20) ); // "fghijklmnopqrst"
var_dump( str_slice("abcdefghijklmnopqrstuvwxyz", 5, 30) ); // "fghijklmnopqrstuvwxyz"
var_dump( str_slice("abcdefghijklmnopqrstuvwxyz", -20, 2) ); // ""
var_dump( str_slice("abcdefghijklmnopqrstuvwxyz", -20, 10) ); // "ghij"
var_dump( str_slice("abcdefghijklmnopqrstuvwxyz", -20, 15) ); // "ghijklmno"
var_dump( str_slice("abcdefghijklmnopqrstuvwxyz", -20, 40) ); // "ghijklmnopqrstuvwxyz"
【讨论】:
感谢您的努力!这个问题已经超过 7 年了,当我问这个问题时,我就像 3 家公司一样!你应该把它变成一个可供人们使用的库 我有一个repository,用于转储我的脚本,它位于str_random.php。我没有时间管理/重组文件,所以目前我只是把它们转储在那里:)【参考方案2】:您可以使用explode()
(http://php.net/explode) 或substr()
(http://php.net/substr) 与strpos()
(http://php.net/strpos) 的组合。
<?php
$string = "MICROSOFT CORP CIK#: 0000789019 (see all company filings)";
$newString = substr($string, 0, strpos($string, " CIK#"));
echo $newString;
编辑:编辑了几次以适合您的问题编辑...
【讨论】:
呃,这似乎切断了 CORP 之前的一切! @AndrewAlexander:抱歉,问题不够清楚;也用第二个选项更新了答案。 $newString = substr($string, 0, strpos($string, "CIK#")+5);用 $companyname 代替 $newString 也不起作用。 Hrm,可能还有其他部分我看不到?我从页面的 HTML 中提取它。这可能是它不起作用的原因吗?您将 $string 设置为相关字符串的示例效果很好。但是我需要的正常的不工作 您必须展示一个 HTML 样本和您编写的未获取正确字符串的脚本;我建议先找一个关于 HTML 解析的答案,如果没有可以让你满意的问题,请打开一个新问题,因为这是一个全新的主题。祝你好运!【参考方案3】:假设你的字符串存储在 $a 中,那么任何一个
echo substr($a, 0, strpos($a, " CIK"));
或
preg_match("/(.*) CIK/", $a, $matches);
echo $matches[1];
或
echo preg_replace("/(.*) CIK.*/", "$1", $a);
会的。
【讨论】:
$companyname = substr($companyname, 0, strpos($companyname, "CIK"));试了试,一无所获。 @Andrew Alexander:可能是一个简单的错误。您确定您的字符串内容是您指定的内容吗?如果是这样,您是否正确地回显了正确的输出? 据我所知 - 我将如何检查我的字符串是否包含 echo 未显示的更多信息?该字符串中有一个链接 - 我想这可能会导致问题? 我为我的普遍无知道歉,我是 PHP 切片的新手【参考方案4】:你会用strpos
找到"CORP"
的位置(一定要阅读巨大的红色警告),然后用substr
切断相关部分。
【讨论】:
以上是关于如何在 PHP 中对字符串进行切片?的主要内容,如果未能解决你的问题,请参考以下文章