Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何强制数组键';当值是数字时,是否将其设置为整数而不是字符串?_Php_Arrays - Fatal编程技术网

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

当一些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)
  '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确实会更好。