将数组分割以创建关联数组

3

我有一个数组,看起来像这样:

a 12 34
b 12345
c 123456

所以数组看起来像这样:
$array[0] = "a 12 34"
$array[1] = "b 12345"
$array[2] = "c 123456"

我正在尝试创建一个关联数组,使得

[a] => 12 34
[b] => 12345
[c] => 123456

我是否可以将数组分成两个部分,一个包含"a, b, c",另一个包含它们的内容,并使用array_combine()函数?或者还有其他方法吗?

3个回答

1
您可以在循环中执行此操作,就像下面的代码片段所示。 点击这里进行快速测试:
        $array      = array("a 12 34", "b 12345", "c 123456");
        $array2     = array();

        foreach($array  as $data){
            preg_match("#([a-z])(\s)(.*)#i", $data, $matches);
            list(, $key, $space, $value)    = $matches;
            $array2[$key]   = $value;
        }

        var_dump($array2);
        // YIELDS::
        array(3) {
            ["a"]=>  string(5) "12 34"
            ["b"]=>  string(5) "12345"
            ["c"]=>  string(6) "123456"
        }

或者使用 array_walk()array_combine() 的混合方式,可以在此 快速测试
        <?php

            $array      = array("a 12 34", "b 12345", "c 123456");
            $keys       = array();

            array_walk($array, function(&$data, $key) use (&$keys){
                $keys[] = trim(preg_replace('#(\s.*)#i',   '', $data));;
                $data   = trim(preg_replace('#(^[a-z])#i', '', $data));
            });

            $array = array_combine($keys, $array);

            var_dump($array);;
            // YIELDS::
            array(3) {
                ["a"]=>  string(5) "12 34"
                ["b"]=>  string(5) "12345"
                ["c"]=>  string(6) "123456"
            }

0

你可以毫不费力地做到这一点 :) 一个简单的循环就可以实现。

  1. 创建新数组
  2. 对每一行进行循环
  3. 分割每个数据(使用explode(' ', $row, 2)strstrsubstr等方法)?
  4. 将数据放入新数组中$array[$key] = $value;

0
你可以使用 array_map、array_column 和 array_combine 的组合:
$array = array_map(function ($v) { return explode(' ', $v, 2); }, $array);
$array = array_combine(array_column($array, 0), array_column($array, 1));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接