#php #string #slice
#php #строка #нарезать
Вопрос:
Хорошо, итак, у меня есть эта строка:
"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=amp;match=amp;CIK=MSFTamp;filenum=amp;State=amp;Country=amp;SIC=amp;owner=excludeamp;Find=Find Companiesamp;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. Эндрю, проверьте мой обновленный ответ после ваших правок.
Ответ №1:
Вы можете использовать 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;
Редактировать: отредактировано несколько раз, чтобы соответствовать редактированию вашего вопроса…
Комментарии:
1. Э, это, кажется, отсекает все ДО CORP!
2. @AndrewAlexander: извините, в вопросе было недостаточно ясно; обновил ответ и вторым вариантом.
3. $newString = substr($string, 0, strpos($string, «CIK#») 5); с заменой $companyname на $newString тоже не сработало.
4. Хм, может быть, есть дополнительные части, которые я не вижу? Я извлекаю ее из HTML страницы. Может быть, поэтому он не работает? Ваш пример с установкой $string в качестве рассматриваемой строки работал нормально. Но обычный, который мне нужен, не работает
5. Вам нужно будет показать образец HTML-кода и сценарий, который вы написали, который не извлекает правильную строку; Я предлагаю сначала поискать ответ при синтаксическом анализе HTML, и если его нет, чтобы удовлетворить вас, откройте новый вопрос, поскольку это совершенно новая тема. Удачи!
Ответ №2:
Вы бы нашли позицию "CORP"
with strpos
(обязательно прочитайте гигантское красное предупреждение), а затем отрезали соответствующую часть with substr
.
Ответ №3:
Я зашел на эту страницу в поисках метода среза slice($start, $end)
, но нашел только решения, зависящие от конкретного случая.
В моем случае у меня есть только индексы (начало и конец). Необходимость a length
для нарезки строки казалась глупой. Итак, я написал функцию среза. Он имитирует метод slice в JavaScript.
// 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"
Комментарии:
1. Спасибо за усилия! Вопросу более 7 лет, и я, как и 3 компании, прошел мимо того, где я был, когда я его задал! Вы должны превратить это в библиотеку, доступную для людей
2. У меня есть репозиторий , куда я сбрасываю свои скрипты, и это в str_random.php . У меня нет времени на управление / реструктуризацию файлов, поэтому в настоящее время я просто сбрасываю их туда 🙂
Ответ №4:
Предполагая, что ваша строка хранится в $ a, тогда любой из
echo substr($a, 0, strpos($a, " CIK"));
или
preg_match("/(.*) CIK/", $a, $matches);
echo $matches[1];
или
echo preg_replace("/(.*) CIK.*/", "$1", $a);
подойдет.
Комментарии:
1. $companyname = substr($companyname, 0, strpos($companyname, «CIK»)); Пытаюсь это сделать, но ничего не получается.
2. @Andrew Alexander: вероятно, простая ошибка. Вы уверены, что содержимое вашей строки соответствует указанному вами? Если да, правильно ли вы повторяете правильный вывод?
3. Насколько я знаю, как мне проверить и посмотреть, содержит ли моя строка еще какую-либо информацию, которую echo не показывает? В строке есть ссылка — я полагаю, это может вызвать проблему?
4. Прошу прощения за мое общее невежество, я новичок в нарезке в PHP