【问题标题】:Convert numeric strings in multi-dimensional array to int将多维数组中的数字字符串转换为int
【发布时间】:2023-03-22 19:59:01
【问题描述】:

我有一个多维数组:

array(3) {
    [0]=> array(2) {
        [0]=> string(3) "ABC"
        [1]=> string(3) "744"
    }
    [1]=> array(2) {
        [0]=> string(3) "DEF" 
        [1]=> string(2) "86"
    }
    [2]=> array(2) {
        [0]=> string(3) "GHI" 
        [1]=> string(1) "2"
    }
} 

现在我想将数字的字符串类型值转换为整数类型。

例如744 是字符串,但它应该是整数。

我在搜索论坛后尝试了一些功能,但没有成功。 稍后我必须在 json_encode() 函数中使用这个数组,并且在我的 javascript 进程中,数值必须是整数类型。

【问题讨论】:

  • 在 JavaScript 中你可以使用 parseInt(object.variable); - 在 PHP 中,您可以通过使用 & 通过数组引用 foreach($array as &$var) 使用 if(is_numeric($var)) 然后将变量转换为 int $var = (int) $var;
  • 对于正在寻找适合平面数组数据的解决方案的研究人员,请查看此类似问题:stackoverflow.com/q/9593765/2943403

标签: javascript php arrays multidimensional-array type-conversion


【解决方案1】:

只需使用intval(string)

参考:http://php.net/manual/en/function.intval.php

编辑:

如果您将转换整个数组,它将无法工作。 然后你必须测试非 int 值,这样它就不会被转换。

inval($value) 将为非整数值返回 0,那么您必须测试该值是 0 还是只是非整数值。

如果您始终将 int 值作为数组中的第二个索引,则只需使用 intval($value);

foreach ($a as &$ar) {
  $ar[1] = intval($ar[1]);
} 

【讨论】:

  • 它的模式相同...第二个值始终是整数
【解决方案2】:

您可以将intval 与建议的其他答案一样与array_walk_recursive 结合使用:

array_walk_recursive($array, function(&$item) {
    if (is_numeric($item)) {
        $item = intval($item);
    }
});

【讨论】:

    【解决方案3】:

    试试这个

    $a = array( 0=>  array( 0=> "ABC" ,1=> "744" ) ,1=>  array( 0=>  "DEF",1=>  "86" ),  2=>    array( 0=> "GHI", 1=> "2" ) );
    foreach ($a as $i)
    echo intval($i[1]);
    

    【讨论】:

    • 这个答案不是很灵活,它只会回显而不是覆盖子数组值。这个答案也是“仅代码”,这意味着它对研究人员的价值很低。可以安全地删除此答案,因为 tttpapi 的答案更恰当地使用了这种技术(并且之前已发布)。
    【解决方案4】:

    如果您需要检查 value 是否可以转换为 int - 请参阅question 在它只使用 foreach for 循环数组并且如果当前迭代值可以转换为 int - 使用 intval 之后。

    示例 -

    $a = array('test', '11', 'abc', '14554');
    echo "<pre>";
    var_dump($a);
    echo "</pre>";
    foreach ($a as &$item) {
    if (ctype_digit($item)) {
        $item = intval($item);
    }
    }
    echo "<pre>";
    var_dump($a);
    echo "</pre>";
    

    【讨论】:

    • 给研究人员的说明,如果你有负数字符串,ctype_digit() 将不会被满足,因为它要求字符串中的所有字符都是数字——因此负数不会被转换为负整数.这个答案一定是错误的,我只是想对这种技术提出警告。
    【解决方案5】:
    $variable = array(3) { 
            [0]=> array(2) { 
                            [0]=> string(3) "ABC" 
                            [1]=> string(3) "744" } 
            [1]=> array(2) { 
                             [0]=> string(3) "DEF" 
                             [1]=> string(2) "86" } 
            [2]=> array(2) { 
                             [0]=> string(3) "GHI" 
                             [1]=> string(1) "2"  }
        } 
    
    foreach($variable as $key=>$arrayStrings)
        foreach($arrayStrings as $innerKey=>$string)
               if(is_numeric($string))
                  $variable[$key][$innerKey] = intval($string);
    

    【讨论】:

    • 它将所有内容转换为整数..并将每个键的值设为 1
    • 这个答案缺少教育解释。
    【解决方案6】:

    您可以按如下方式实现递归函数,它将采用任意大小和维度的数组。

     function convertArray(myArray){
        convertedArray=array();
        foreach(myArray as key=>value){
            if(is_array(value)){
                convertedArray[key] = convertArray(value);      
            }else{
                temp = intval(value);
                if(temp==0){
                    convertedArray[key] = value;
                }else{
                    convertedArray[key] = temp;
                }       
            }
        }
        return convertedArray;
     }
    

    【讨论】:

    • 如果输入数据具有可变的深度/结构,Daniel Ribeiro 的 sn-p 采用 array_walk_recursive() 是一个不那么费力的 sn-p 并且更易于阅读。
    【解决方案7】:

    稍后我必须在 json_encode() 函数中使用这个数组,并且在我的 javascript 进程中,数值必须是整数类型。

    你查过JSON Predefined Constants:

    $result = json_encode($array, JSON_NUMERIC_CHECK);
    

    JSON_NUMERIC_CHECK(整数)

    将数字字符串编码为数字。自 PHP 5.3.3 起可用。

    【讨论】:

    • 这个答案切中了问题的核心,而不是专注于 XY 问题。这个答案通知 OP 避免执行迭代准备(很长的路要走)。如果您将数据转换为 json 字符串,使用此解决方案是最专业和最直接的。
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2012-11-17
    相关资源
    最近更新 更多