【问题标题】:getting intval() using php?使用 php 获取 intval()?
【发布时间】:2011-11-16 23:46:16
【问题描述】:

假设我有以下字符串:

danger13 afno 1 900004

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

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

【问题讨论】:

  • 想到的一种方法是使用explode() 将字符串拆分为数组,遍历每个成员,找到最高的一个
  • 字符串是否总是具有相同的格式?您想要字符串中的“最高数字”还是总是字符串中的最后一个数字
  • intval('danger13 afno 1 900004') 不给你13

标签: php function integer


【解决方案1】:

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

$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),这对您来说不会令人满意.您需要更仔细地定义您的意思。

【讨论】:

    【解决方案2】:
    <?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;
    
    ?>
    

    【讨论】:

      【解决方案3】:
      $nums=preg_split('/[^\d\.]+/',$string); //splits on non-numeric characters & allows for decimals
      echo max($nums);
      

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

      【讨论】:

      • @Gordon:点了。 preg_split 并在 max 更好地工作之前过滤掉 alpha。
      【解决方案4】:

      对于字符串中的字典序最高整数值(最多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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-31
        • 2010-11-02
        • 2017-10-23
        • 1970-01-01
        相关资源
        最近更新 更多