如何将数组键的值强制为整数而不是字符串,当它们是数字时?

时间:2014-05-17 10:42:24

标签: php arrays

当某些PHP函数以array_replace()为例时,如何将所有数值强制为整数而不是字符串?这是一个例子:

我的$item是一个默认值数组,var_dump($item)生成此值:

array (size=12)
  'id' => string '' (length=0)
  'cid' => int 2
  'pid' => string '' (length=0)
  'rid' => string '' (length=0)
  'section' => int 0
  'title' => string '' (length=0)
  'slug' => string '' (length=0)
  'image' => string '' (length=0)
  'description' => string '' (length=0)
  'ordering' => string '' (length=0)
  'created' => string '' (length=0)
  'modified' => string '' (length=0)

然后,我调用一个函数来更新$item数组,其中包含带有函数array_replace($item, $item_db);的db的新值,当我再次var_dump($item)时,我得到这个:

array (size=12)
  'id' => string '12' (length=2)
  'cid' => string '1' (length=1)
  'pid' => string '0' (length=1)
  'rid' => string '37' (length=2)
  'section' => string '0' (length=1)
  'title' => string 'Article2' (length=8)
  'slug' => string 'articles123' (length=11)
  'image' => string 'e9213e52d235bd892b3337fce3172bed.jpg' (length=36)
  'description' => string '' (length=0)
  'ordering' => string '3' (length=1)
  'created' => string '2014-05-15 14:51:10' (length=19)
  'modified' => string '2014-05-15 23:29:40' (length=19)

除了id, cid, pid, rid, section, orderingcreated键外,我希望将所有数值(modified)作为整数。

我想如何在没有手动编写的情况下这样做:

$item['section'] = (int) $item['section'];

有没有解决方案?

2 个答案:

答案 0 :(得分:3)

你可以使用这样简单的foreach循环:

foreach ($array as $k => $v) {
   if ($k != 'created' && $k != 'modified') {
       $array[$k] = (int) $v;
   }
}

当然,如果您确定所有值都是数字值,那么它们可以转换为int。否则你必须使用:

foreach ($item as $k => $v) {
    if (is_numeric($v)) {
        $item[$k] = (int) $v;
    }
}

答案 1 :(得分:1)

创建一个包含您不想重命名的值的数组。然后遍历您的数组 - 在每次迭代时,检查当前密钥是否在$defaults数组中。如果不是,请将其推入新数组($results),并将当前数字偏移量作为键。如果没有,请使用当前密钥将其推入新阵列:

有些事情:

$defaults = ['created', 'modified']; // Keys to be left untouched
$result = [];                        // Results array
$i = 0;                              // Numeric offset

foreach ($array as $key => $value) {
    if (!in_array($key, $defaults)) {
        $result[++$i] = $value;
    } else {
        $result[$key] = $value;
    }
}

print_r($result);