Php 如何强制数组键';当值是数字时,是否将其设置为整数而不是字符串?
当一些PHP函数发生时(例如使用Php 如何强制数组键';当值是数字时,是否将其设置为整数而不是字符串?,php,arrays,Php,Arrays,当一些PHP函数发生时(例如使用array\u replace()),如何强制所有数值都是整数而不是字符串?以下是一个例子: 我的$item是一个默认值数组,它var\u dump($item)产生以下结果: array (size=12) 'id' => string '' (length=0) 'cid' => int 2 'pid' => string '' (length=0) 'rid' => string '' (length=0) 'se
array\u replace()
),如何强制所有数值都是整数而不是字符串?以下是一个例子:
我的$item
是一个默认值数组,它var\u 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\u replace($item,$item\u db)的db代码>,当我再次var\u 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
)都是整数,但创建的和修改的键除外
如果不每次手动写入以下内容,我将如何执行此操作:
$item['section'] = (int) $item['section'];
有什么解决方案吗?您可以使用这样简单的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;
}
}
您可以使用这样简单的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;
}
}
创建一个数组,其中包含不希望重命名的值。然后在数组中循环-在每次迭代中,检查当前键是否在$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);
创建一个数组,其中包含不希望重命名的值。然后在数组中循环-在每次迭代中,检查当前键是否在$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);
“我希望所有数值(id、cid、pid、rid、section、ordering)都是整数,但创建和修改的键除外。”我对您的答案做了一个小改动,实际效果与预期相符。请考虑接受修改。感谢您的ideaDone,在本例中使用is_numeric确实会更好。“我希望所有数值(id、cid、pid、rid、section、ordering)都是整数,但创建和修改的键除外。”我对您的答案做了一个小改动,实际效果与预期相符。请考虑接受修改。感谢您的支持,在这种情况下使用is_numeric确实会更好。