【问题标题】:get number in front of 'underscore' with php用php在'下划线'前面获取数字
【发布时间】:2010-02-08 10:49:33
【问题描述】:

我有这个:

15_some_text_or_numbers;

我想得到第一个下划线前面的内容。 第一个下划线后面总是有一个字母。

示例:

  14_hello_world = 14

结果是数字 14!

谢谢

【问题讨论】:

标签: php


【解决方案1】:

如果前面有总是一个数字,可以使用

echo (int) '14_hello_world';

查看String conversion to integers in the PHP manual上的条目

这是一个没有类型转换的版本:

$str = '14_hello_1world_12';
echo substr($str, 0, strpos($str, '_'));

请注意,如果没有找到下划线,这将不返回任何内容。如果找到,返回值将是一个字符串,而类型转换的结果将是一个整数(这并不重要)。如果您希望在不存在下划线时返回整个字符串,可以使用

$str = '14_hello_1world_12';
echo str_replace(strstr($str, '_'), '', $str);

从 PHP5.3 开始,您还可以使用 strstr 并将 $before_needle 设置为 true

echo strstr('14_hello_1world_12', '_', true);

注意:由于 PHP 中从字符串到整数的类型转换遵循定义明确且可预测的行为,并且此行为遵循 Unix 自己的 strtod 混合字符串规则,我不明白第一种方法如何滥用类型转换。

【讨论】:

  • 但有时后面还有一个数字,比如“14_hello_world22”,那这样行吗?
  • 你不需要使用 substr()。只需使用函数 strstr()。它返回从第一次出现针(本例中为字符)到字符串结尾的所有字符
  • @DPC“从第一次出现针(在这种情况下为字符)到字符串结尾的所有字符”不是所要求的。如果你想使用 strstr 你必须使用 $beforeNeedle 标志,如我的回答所示。
  • @Gordon 我知道。我只是在讲述该功能的功能。读者至少应该自己做一些挖掘工作:P
【解决方案2】:
preg_match('/^(\d+)/', $yourString, $matches);

$matches[1] 将保留您的价值

【讨论】:

  • 你确定[1]?我会说是[0]
  • 我确定。 [0] 将保存整个匹配的字符串,而 [1] 将具有第一组值(括号)
【解决方案3】:

比正则表达式更简单:

$x = '14_hello_world';
$split = explode('_', $x);
echo $split[0];

输出 14。

【讨论】:

  • 可以使用is_numeric($split[0])检查结果的数值,你应该在explode中将limit设置为2,因为你不需要其余的,然后检查$split不是一个空数组。
猜你喜欢
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
相关资源
最近更新 更多