在不使用循环的情况下将字符串分解为关联数组?

Pra*_*mod 26 php arrays

我有一个字符串1-350,9-390.99,...,我需要把它变成一个关联数组,如下所示:

 Array
    (
        [1] => 350
        [9] => 390.99
        ...........
    ).
Run Code Online (Sandbox Code Playgroud)

是否可以仅使用数组函数执行此操作,而无需循环?

bis*_*hop 32

PHP 5.5+双线解决方案,使用array_chunkarray_column:

$input  = '1-350,9-390.99';

$chunks = array_chunk(preg_split('/(-|,)/', $input), 2);
$result = array_combine(array_column($chunks, 0), array_column($chunks, 1));

print_r($result);
Run Code Online (Sandbox Code Playgroud)

产量:

Array
(
    [1] => 350
    [9] => 390.99
)
Run Code Online (Sandbox Code Playgroud)

在3v4l.org在线查看.

  • @MatissJurgelis ......它产生了人们期望的东西(https://3v4l.org/upYHd):`[1 =>'',9 =>'390.99']` (3认同)

boz*_*doz 20

这是使用array_walk在没有for循环的情况下执行此操作的方法:

$array = explode(',', $string);
$new_array = array();
array_walk($array,'walk', $new_array);

function walk($val, $key, &$new_array){
    $nums = explode('-',$val);
    $new_array[$nums[0]] = $nums[1];
}
Run Code Online (Sandbox Code Playgroud)

Ideone.com上的示例.


jel*_*jel 7

这样的事情应该有效:

$string = '1-350,9-390.99';

$a = explode(',', $string);

foreach ($a as $result) {
    $b = explode('-', $result);
    $array[$b[0]] = $b[1];
}
Run Code Online (Sandbox Code Playgroud)


haf*_*huk 7

这使用带有闭包的array_walk.

<?php
$string = "1-350,9-390.99";
$partial = explode(',', $string);
$final = array();
array_walk($partial, function($val,$key) use(&$final){
    list($key, $value) = explode('-', $val);
    $final[$key] = $value;
});
print_r($final);
?>
Run Code Online (Sandbox Code Playgroud)

互动小提琴.