如何将字符串数组转换为int数组

时间:2019-12-12 13:45:41

标签: php arrays string int

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

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中做到这一点?请帮我解决这个问题? 问候, 老板

5 个答案:

答案 0 :(得分:0)

您可以使用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

答案 1 :(得分:0)

这将它分为多个阶段,首先由=给出名称和值,然后使用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
        )

)

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

答案 2 :(得分:0)

它不是很安全,但是可以做到这一点:

<?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];

答案 3 :(得分:0)

$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

答案 4 :(得分:0)

您可以制作一个新的数组:

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