从字符串反向提取数字而不用点

时间:2012-11-26 20:14:18

标签: php

我有一个字符串 6.7.0.0.1.3.6.6.1.6.1.e164.arpa

我怎样才能获得反向的数字

喜欢 16166310076

感谢任何帮助。

5 个答案:

答案 0 :(得分:1)

您可以这样做:

list( ,, $num) = explode( ".", strrev( "6.7.0.0.1.3.6.6.1.6.1.e164.arpa"), 3);
echo str_replace( '.', '', $num);

它将反转的字符串转换为由三个元素组成的数组:

  1. arpa
  2. e164
  3. 6.7.0.0.1.3.6.6.1.6.1
  4. 然后,$num被设置为该数组的第三个元素,这是数字的字符串,我用空字符串替换所有.

    这将打印16166310076

答案 1 :(得分:1)

strrev(implode('', array_filter(explode('.', $string), 'is_numeric')));

答案 2 :(得分:0)

<?php
$number = '6.7.0.0.1.3.6.6.1.6.1.e164.arpa';
// Remove dots
$number = str_replace('.', '', $number); // 67001366161e164arpa
// Match number
preg_match("/[0-9]+/", $number, $matches); // array(67001366161)
$number = $matches[0]; // 67001366161
// Reverse number
$number = strrev($number); // 16166310076
// echo number
echo $number;
?>

答案 3 :(得分:0)

您可以像这样利用PHP类型的杂耍:

$result = strrev((int)str_replace('.', '', $str));
  • str_replace删除了给您的点:67001366161e164arpa
  • 将其强制转换为(int)会删除第一个不是数字的字符的所有内容:67001366161
  • strrev将其撤消。

答案 4 :(得分:0)

这是一个非基于字符串的解决方案,应该更适合您的需求。

$string = '6.7.0.0.1.3.6.6.1.6.1.e164.arpa';
$parts = explode('.', $string);
$addr = array_reverse(array_slice($parts, 0, count($parts)-2));
echo implode('', $addr); // 16166310076