我有一个这样的字符串数组,
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中做到这一点?请帮我解决这个问题? 问候, 老板
答案 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
答案 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)