сделать int (1) и int (2) стать int (12) - PullRequest
0 голосов
/ 13 апреля 2011

Я пытаюсь вручную преобразовать строку в целое число, используя ord (), а не автоматически, например (int), intval () или settype ().Есть ли другие способы конвертировать строку вручную?

<?php
function first($string){
  for($i=0; $i!=strlen($string); $i++){
  if(ord($string[$i])===46){
    $stop=true;
  }
  if(!isset($stop)){
    $n=ord($string[$i]);
    if($n===48){$n=0;}
    elseif($n===49){$n=1;}
    elseif($n===50){$n=2;}
    elseif($n===51){$n=3;}
    elseif($n===52){$n=4;}
    elseif($n===53){$n=5;}
    elseif($n===54){$n=6;}
    elseif($n===55){$n=7;}
    elseif($n===56){$n=8;}
    elseif($n===57){$n=9;}
    else{ $n=0;}
    var_dump($n);
  }
}
}
first("12"); // result = int(1) int(2), what i want is int(12)
?>

Ответы [ 4 ]

3 голосов
/ 13 апреля 2011

Пример № 1:

function first($string){
  return $string * 1;
  }

Пример № 2 (вычисление ASCII-значений цифр):

function first($string){
  $res = 0;
  $arr = array_reverse(str_split($string, 1));
  $mult = 1; 
  foreach($arr as $digit) {
    if (ord($digit) > 47 && ord($digit) < 58) {
      $res += (ord($digit) - 48) * $mult;
      $mult *= 10;
      }
    elseif($digit == '-') $res *= -1;
    elseif($digit != '+') {
      $res = 0;
      $mult = 1;
      }
    }  
  return $res;
  }

Использование:

var_dump(first('-123.534')); // -123
var_dump(first('-1.3'));     // -1
var_dump(first('-777'));     // -777
var_dump(first('12334'));    // 12345
var_dump(first('5.53'));     // 5
var_dump(first('+64.02'));   // 64
1 голос
/ 13 апреля 2011

Я не знаю, почему вы этого хотите, но вот пример, как вы могли бы это сделать.

<?php
function first($string){
  $n = 0;
  for($i=0; $i!=strlen($string); $i++){
    $n *= 10;
    $o=ord($string[$i]);
    if ($o >= 48 && $o <= 57) {
      $n += $o - 48;
    }
  }
  var_dump($n);
  return $n;
}
?>
1 голос
/ 13 апреля 2011

Вы должны использовать переменную $sum отдельно от $n.

Перед тем, как добавить свой блок if():

$sum = $sum * 10;

И вместо var_dump($n); накапливайте промежуточныерезультат там:

$sum += $n;

Затем добавьте var_dump($sum); как самую последнюю вещь в вашей функции. После блока if и for.

1 голос
/ 13 апреля 2011

Не могли бы вы объяснить, почему вы хотите это сделать? Домашнее задание? Есть много способов сделать это, и я не могу придумать ничего более сложного (и медленного), чем ваш. Попробуйте один из них:

function first($string) {
    return (int)$string;
}

function first($string) {
    return intval($string);
}

function first($string) {
    return $string * 1;
}

function first($string) {
    return $string + 0;
}

...

РЕДАКТИРОВАТЬ: перечитывая ваш вопрос, кажется, что может быть один или несколько . (код ASCII 46), которые не являются десятичными точками во входной строке, и вы хотите узнать Первая часть как Int. В этом случае просто выполните:

function first($string) {
    return (int)array_shift(explode('.',$string));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...