当某些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, ordering
和created
键外,我希望将所有数值(modified
)作为整数。
我想如何在没有手动编写的情况下这样做:
$item['section'] = (int) $item['section'];
有没有解决方案?
答案 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);