使用php获取intval()?

时间:2011-09-14 12:21:21

标签: php function integer

假设我有以下字符串:

danger13 afno 1 900004

使用intval()它给了我13,但是,我想要获取字符串中的最高整数,即9000004,我该如何实现呢?

编辑:字符串有不同的形式,我不知道最高的数字在哪里。

4 个答案:

答案 0 :(得分:4)

你需要从字符串中获取所有整数,然后找到最大的...

$str = "danger13 afno 1 900004";
preg_match_all('/\d+/', $str, $matches); // get all the number-only patterns
$numbers = $matches[0];

$numbers = array_map('intval', $numbers); // convert them to integers from string

$max = max($numbers); // get the largest

$max现在是900004

请注意,非常简单。如果您的字符串具有与您不希望作为单独整数匹配的模式\d+(1位或更多位数)匹配的任何内容(例如43.535将返回535),则此赢得对你不满意。你需要更准确地定义你的意思。

答案 1 :(得分:2)

对于字符串中的字典最高整数值(最多PHP_INT_MAX),您可以将数字拆分并获得最大值:

$max = max(preg_split('/[^\d]+/', $str, NULL, PREG_SPLIT_NO_EMPTY));

Demo

或者更好的自我记录:

$digitsList = preg_split('/[^\d]+/', $str, NULL, PREG_SPLIT_NO_EMPTY);
if (!$digitsList)
{
    throw new RuntimeException(sprintf('Unexpected state; string "%s" has no digits.', $str));
}
$max = max($digitsList);

答案 2 :(得分:1)

$nums=preg_split('/[^\d\.]+/',$string); //splits on non-numeric characters & allows for decimals
echo max($nums);

ETA:更新为允许以“数字”结尾或包含数字的“单词”(感谢戈登!)

答案 3 :(得分:0)

<?php

$string = 'danger13 afno 1 900004';

preg_match_all('/[\d]+/', $string, $matches);

echo '<pre>'.print_r($matches,1).'</pre>';

$highest = array_shift($matches[0]);

foreach($matches[0] as $v) {
  if ($highest < $v) {
    $highest = $v;
  }
}

echo $highest;

?>