【问题标题】:How can convert a string array to int array如何将字符串数组转换为int数组
【发布时间】:2019-12-12 13:45:41
【问题描述】:

我有一个这样的字符串数组,

C:\wamp64\www\date\task.php:37:
array (size=6)
  0 => string '_06_CM_1640=[04];' (length=17)
  1 => string '_06_CM_1899=[05];' (length=17)
  2 => string '_06_CM_2094=[24];' (length=17)
  3 => string '_06_CM_2096=[12];' (length=17)
  4 => string '_06_CM_1871=[16,12];' (length=20)
  5 => string '_06_CM_3369=[09];' (length=17)

我想将其转换为 int 数组。

$_06_CM_1640 = [4];
$_06_CM_1899 = [5];
$_06_CM_2096 = [12]; 
$_06_CM_2094 = [24]; 
$_06_CM_1871 = [16,12]; 
$_06_CM_3369 = [16]; 

如何在 PHP 中做到这一点?请帮我解决这个问题? 问候, 博斯

【问题讨论】:

  • 您的意思是制作单个变量?我不确定我是否理解您要执行的操作....
  • 使用array_map 对我来说似乎是一个好的开始。
  • 和一个regex 从方括号中拆分/提取。
  • @Jeremy Harris,是的

标签: php arrays string int


【解决方案1】:

你可以使用array_walk

array_walk($aa, function($v, $k) use (&$new){
  $inner = explode('=', $v);
  $new[$inner[0]] = $inner[1];
});
print_r($new);// this will give you array with keys

现在您可以使用extract($new) 将每个键设为变量并使用$_06_CM_1640 访问它们

示例:- https://3v4l.org/ddKZj

【讨论】:

  • 亲爱的 Rakesh Jakhar,您的代码很好。但我想单独排列数组,如下所示。$_06_CM_1640 = [4]; $_06_CM_1899 = [5]; $_06_CM_2096 = [12]; $_06_CM_2094 = [24]; $_06_CM_1871 = [16,12]; $_06_CM_3369 = [16];
【解决方案2】:

这将它分成多个阶段,首先由= 给出名称和值,然后使用trim() 删除任何=[]; 围绕值,最后将字符串分解为一个数字数组...

$arr = [0 => '_06_CM_1640=[04];',
    1 => '_06_CM_1899=[05];',
    2 => '_06_CM_2094=[24];',
    3 =>  '_06_CM_2096=[12];',
    4 =>  '_06_CM_1871=[16,12];',
    5 =>  '_06_CM_3369=[09];'];

$output = [];
foreach ( $arr as $entry )  {
    list($name, $values) = explode("=", $entry,2);
    $output[$name] = explode(",", trim($values, "=[];" ));
} 


print_r($output);

给..

Array
(
    [_06_CM_1640] => Array
        (
            [0] => 04
        )

    [_06_CM_1899] => Array
        (
            [0] => 05
        )

    [_06_CM_2094] => Array
        (
            [0] => 24
        )

    [_06_CM_2096] => Array
        (
            [0] => 12
        )

    [_06_CM_1871] => Array
        (
            [0] => 16
            [1] => 12
        )

    [_06_CM_3369] => Array
        (
            [0] => 09
        )

)

我实际上会将其保留为数组而不是单个值。

【讨论】:

    【解决方案3】:

    这不是很安全,但这样的东西可以解决问题:

    <?php
    function convertStringArrayToIntArray($src)
    {
        $int = [];
        foreach ($src as $key => $value){
            $split = explode('=', $value);
            $newKey = $split[0];
            $newValue = $split[1];
            $newValue = str_replace(['[', ']', ';'], '', $newValue);
            $newValue = explode(',', $newValue);
            array_walk($newValue, function(&$value, &$key){
                $value = intval($value);
            });
            $int[$newKey] = $newValue;
        }
        return $int;
    }
    
    $src = [
        0 => '_06_CM_1640=[04];',
        1 => '_06_CM_1899=[05];',
        2 => '_06_CM_2094=[24];',
        3 => '_06_CM_2096=[12];',
        4 => '_06_CM_1871=[16,12];',
        5 => '_06_CM_3369=[09];'
    ];
    $ints = convertStringArrayToIntArray($src);
    extract($ints);
    var_dump(get_defined_vars());
    //        $_06_CM_1640 = [4];
    //        $_06_CM_1899 = [5];
    //        $_06_CM_2096 = [12];
    //        $_06_CM_2094 = [24];
    //        $_06_CM_1871 = [16,12];
    //        $_06_CM_3369 = [16];
    

    【讨论】:

      【解决方案4】:
      $arr = [
          '_06_CM_1640=[04];',
          '_06_CM_1899=[05];',
          '_06_CM_2094=[24];',
          '_06_CM_2096=[12];',
          '_06_CM_1871=[16,12];',
          '_06_CM_3369=[09];'
      ];
      
      $results = [];
      
      foreach($arr as $v) {
          if (!preg_match_all('~ (?: , | (?<key> \w+ ) = \[ ) (?<val> \d+ ) ~xA', $v, $m))
              continue;
      
          $results[$m['key'][0]] = array_map('intval', $m['val']); 
      
      }
      
      var_dump($results);
      
      // extract($results); // if you want to create the variables
      

      【讨论】:

      • 亲爱的 Casimir et Hippolte,您的代码非常有用,但我想要单独的数组
      • @Bos:如果你想这样做,这就是为什么我写了最后一行评论的原因。 extract 创建以数组键命名的单个变量。取消注释并执行例如print_r($_06_CM_1640);。请注意,我评论它是因为使用 extract 通常是一种不好的做法。
      【解决方案5】:

      你可以新建一个数组:

      foreach($arr as $stri){
          $tmp = explode('=',$stri); 
          $ar[$tmp[0]] = explode(',',preg_replace('~[\[\]\;]~', '', $tmp[1]));  // clear values
      } 
      

      然后使用extract()函数:

      extract($ar);
      
      print_r($_06_CM_1871);
      print_r($_06_CM_3369);
      

      输出:

      Array
      (
          [0] => 16
          [1] => 12
      )
      Array
      (
          [0] => 09
      )
      

      Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-26
        • 1970-01-01
        • 2021-12-21
        • 2016-08-14
        • 1970-01-01
        • 1970-01-01
        • 2016-01-27
        • 2013-05-31
        相关资源
        最近更新 更多