簡體   English   中英

拆分數組以創建關聯數組

[英]Split array to create an associative array

我有一個看起來像這樣的數組:

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() 或者還有其他方法嗎?

您可以在循環中執行此操作,如下面的代碼段所示。 在這里快速測試:

        $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()的Blend,它可以在這里進行Quick-Tested。

        <?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"
            }

你可以毫無困難地做到這一點:)一個簡單的循環就可以做到。

  1. 創建新數組
  2. Lopp在每一排
  3. 拆分每個數據( explode(' ', $row, 2)strstrsubstr ,...)?
  4. 將數據放在新數組$array[$key] = $value;

您可以使用array_maparray_columnarray_combine的組合:

$array = array_map(function ($v) { return explode(' ', $v, 2); }, $array);
$array = array_combine(array_column($array, 0), array_column($array, 1));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM