使用 header 行作为键将电子表格中的数组转换为关联数组

Convert array from spreadsheet into associative array with header row as keys

我一直难以想象如何从我从电子表格 table 中提取的数组中 return 特定的数组模式。您可以参考下面提取的数组。

这是从我的电子表格中提取的数组 table

Array
(
    [0] => Array
        (
            [0] => Order Number
            [1] => Status
        )

    [1] => Array
        (
            [0] => 1111
            [1] => Shipped
        )

    [2] => Array
        (
            [0] => 2222
            [1] => For Veri
        )

    [3] => Array
        (
            [0] => 3333
            [1] => Delivered
        )

    [4] => Array
        (
            [0] => 4444
            [1] => Problematic
        )

    [5] => Array
        (
            [0] => 5555
            [1] => Onhold
        )

)

我希望按如下方式return编辑数组:

 Array(
      [1111] => Array
         {  
          [Order Number] => 1111
          [Status] => Delivered
          }
       [2222] => Array
         {  
          [Order Number] => 2222
          [Status] => Delivered
          }
     )

想确认 array_combine 功能是否适用于此?任何帮助将不胜感激。

编辑:由于
,此问题已解决 马库斯 AO。必须对提供的代码片段进行一些调整,才能获得预期的结果。

 //$retrieveArray = extracted arrays from the spreadsheet table.
        $index = null;
        $keys = array_shift($retrieveArray);

        //to declare new set of array
        $named = [];
        
        // to loop the remaining array 
        foreach($retrieveArray as $ln => $vals) {
            $key = !is_null($index) ? $vals[$index] : $ln;
            $named[$key] = array_combine($keys, $vals);
        }

echo "<pre>";
print_r($named);
echo "</pre>";

更新后的输出:

Array
(
    [0] => Array
        (
            [Order Number] => 1111
            [Status] => Shipped
        )

    [1] => Array
        (
            [Order Number] => 2222
            [Status] => For Veri
        )

    [2] => Array
        (
            [Order Number] => 3333
            [Status] => Delivered
        )

    [3] => Array
        (
            [Order Number] => 4444
            [Status] => Problematic
        )

    [4] => Array
        (
            [Order Number] => 5555
            [Status] => Onhold
        )

)

谢谢!

这是导入数组的电子表格和 CSV 数据的常见问题:键成为第一个数组成员。很容易重建成关联数组。我们所需要做的就是将键从第一行移开,然后将它们与所有剩余的值组合起来。如下:

function named_keys(array $array, ?int $index = null): array 
{
    // Shift the keys from the first row: 
    $keys = array_shift($array);

    $named = [];
    // Loop and build remaining rows into a new array:
    
    foreach($array as $ln => $vals) {

        // Using specific index or row numbers?
        $key = !is_null($index) ? $vals[$index] : $ln;

        // Combine keys and values:
        $named[$key] = array_combine($keys, $vals);
    }

    return $named;
}

第一个参数 $array 是源数组本身。 第二个参数 $index(可选)是应该用作结果数组索引的值的索引(数字)。如果 none,则使用源数组中的行号(从 1 开始)。作品如下:

$raw = [['a', 'b'], [111,'foo'], [333,'bar'], [555,'nix']];

$named = named_keys($raw, 0);

/* // results in:

array(3) {
    [111] · array(2) {
        ["a"] · int(111)
        ["b"] · string(3) "foo"
    }
    [333] · array(2) {
        ["a"] · int(333)
        ["b"] · string(3) "bar"
    }
    [555] · array(2) {
        ["a"] · int(555)
        ["b"] · string(3) "nix"
    }
} */