将仅包含数字的字符串转换为INT

时间:2018-08-12 16:44:07

标签: php arrays

我有一个充满物品的数组,都是字符串。但是许多项目应该是INT。

我知道了

$myArray = [
    'id' => '123',
    'title' => 'Hello World',
    'count' => '333'
];

我要

$myArray = [
    'id' => 123,
    'title' => 'Hello World',
    'count' => 333
];

我尝试过:

foreach ($myArray as $key => $value) {
    if($value == (int)$value) {
        $myArray[$key] = (int)$value;
    }
}
  • $ value ==(int)$ value 始终为真,并且杀死了我的头衔
  • $ value ===(int)$ value 始终为假,我的ID和计数仍为字符串
  • is_int($ value)始终为假,我的ID和计数仍为字符串

然后我的想法用尽了:-/我使用的是PHP 7.1.19(cli)

7 个答案:

答案 0 :(得分:2)

尝试i's_numeric',它将发现变量是数字还是数字字符串 http://php.net/manual/en/function.is-numeric.php

答案 1 :(得分:1)

通过int格式的正则表达式匹配字符串:

$ dart --observe <script>.dart

答案 2 :(得分:1)

您可以执行以下操作...

array_walk(&$array,
    create_function('&$value', '$value = (int)$value;');
);

答案 3 :(得分:1)

//如果只需要整数,请使用此

$myArray = [
    'id' => '123',
    'title' => 'Hello World',
    'count' => '333'
];

foreach ($myArray as $key => $value) {
    if(IsIntegerOnly($value)) {
        $myArray[$key] = (int)$value;
    }
}


function IsIntegerOnly($str)
{
  return (is_numeric($str) && $str >= 0 && $str == round($str));
}

答案 4 :(得分:1)

检查数字然后转换为int可能会导致浮点数意外截断。这是使用正则表达式处理此类情况的选项:

$myArray = [
    'id' => '123',
    'title' => 'Hello World',
    'count' => '333.7',
    'something' => '-55.6',
    'something else' => '-.26'
];

foreach ($myArray as $k => $v) {
    if (preg_match('`^-?\d+$`', $v)) {
        $myArray[$k] = (int)$v;
    }
    else if (preg_match('`^-?\d*\.\d+`', $v)) {
        $myArray[$k] = (double)$v;
    }
}

var_dump($myArray);

输出

array(5) {
  ["id"]=>
  int(123)
  ["title"]=>
  string(11) "Hello World"
  ["count"]=>
  float(333.7)
  ["something"]=>
  float(-55.6)
  ["something else"]=>
  float(-0.26)
}

还有一个repl

答案 5 :(得分:0)

尝试一下

PlatformUI

答案 6 :(得分:0)

您可以使用此

  foreach ($myArray as $key => $value) {
    if($key == 'id' || $key =='count') {
        $myArray[$key] = (int)$value;
    }
}