【问题标题】:php: convert array type values from string to int selectivelyphp:有选择地将数组类型值从字符串转换为整数
【发布时间】:2013-11-20 18:38:51
【问题描述】:

给定一个数组,如何将键 [1] 开始的数组从 string 类型转换为 int 类型?

Array
(
  [0] => "id"
  [1] => "6086220176"
  [2] => "6542925762"
  [3] => "6623113406"
  [4] => "6702782948"
)

我已经检查了相关问题how to convert array values from string to int?,但我想跳过转换中的第一个键“id”,而不是数组中的所有键!

【问题讨论】:

  • 您是要根据键值(>=1)还是根据值本身(数字类型)进行转换?到目前为止,您为实现这一目标做了哪些尝试?
  • 我只需要问...为什么? PHP 是松散类型的,数据在数组中的存储方式几乎没有区别,只需在需要时使用它(如果需要)进行转换,确定吗?
  • @CD001 好吧,它可以用作廉价且简单的消毒剂。例如,我有一个分页脚本,目标网址上有 page=n,只需将 page 转换为 int 既便宜又容易。
  • @CrayonViolent ...我并不是说不要转换为 (int)、(float) 或其他...但我不确定我是否能看到转换所有将数组中的值转换为特定类型并将它们填充回数组中......肯定在某些时候你正在对它们做一些事情,而在那个那一刻为什么不强制转换它们呢? if($something === (int) $array[2]) { ... } 例如...
  • $array[0] "id" 是文字字符串 "id" 还是它本身是一个数字,而您只是使用占位符示例?我问的原因是因为如果[0] 本身也是数字@user1899415,以下几个答案将不起作用

标签: php arrays


【解决方案1】:

这样做并不聪明,但这可能会奏效:

$narray = array();
foreach($array as $k => $v){
   $narray[$k+1] = $v;
}
$array = $narray;

$array 是您想要以 1 开头的数组。

【讨论】:

    【解决方案2】:

    php 是松散类型的,你不需要类型转换它。它会为你做的。但是如果你想明确地这样做,你可以这样做:

    $c = count($array)-1;
    for ($n=1;$n<$c;$n++) {
      $array[$n] = (int) $array[$n];
    }
    

    【讨论】:

      【解决方案3】:
      foreach($array as $key => $val){
          if($key !== 0){
              $array[$key] = (int) $val;
          }
      }
      

      foreach($array as $key => $val){
          if(is_numeric($val)){
              $array[$key] = (int) $val;
          }
      }
      

      【讨论】:

        【解决方案4】:
        array_walk($array, function (&$value) {
            if (ctype_digit($value)) {
                $value = (int) $value;
            }
        });
        var_export($array);
        

        输出:

        array (
          0 => 'id',
          1 => 6086220176,
          2 => 6542925762,
          3 => 6623113406,
          4 => 6702782948,
        )
        

        【讨论】:

          【解决方案5】:

          如果你所有的值都是 int :

          <?php
          $arr = array(
            [0] => "id"
            [1] => "6086220176"
            [2] => "6542925762"
            [3] => "6623113406"
            [4] => "6702782948"
          );
          
          $arr = array_map(function($var) {
              // Your 'id' is not an int and will not be converted.
              return is_numeric($var) ? (int)$var : $var;
          }, $arr);
          

          【讨论】:

            【解决方案6】:
            foreach($array as $k => $v){
              if($k == 0) continue;
              $array[$k] = is_int($v) ? intval($v) : $v; // if it's not convertible to int it keeps the value
            }
            

            或者如果你有非数字索引

            $skipped = false;
            foreach($array as $k => $v){
              if($skipped === false){
                $skipped = true;
                continue;
              }
              $array[$k] = is_int($v) ? intval($v) : $v;
            }
            

            【讨论】:

              【解决方案7】:
              $array = array($array[0]) + array_map('intval', $array);
              

              (如果你想避免 foreach 循环)

              【讨论】:

                【解决方案8】:
                $arr = array_merge(array($arr[0]),array_map('intval', array_slice($arr, 1)));
                

                输出:

                array(5) {
                  [0]=>
                  string(2) "id"
                  [1]=>
                  int(2147483647)
                  [2]=>
                  int(2147483647)
                  [3]=>
                  int(2147483647)
                  [4]=>
                  int(2147483647)
                }
                

                Demo.

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-12-14
                  • 2015-07-04
                  • 2013-12-26
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-10-13
                  相关资源
                  最近更新 更多