php 将数组从电子表格转换为以标题行作为键的关联数组[重复]

soat7uwm  于 2022-12-17  发布在  PHP
关注(0)|答案(1)|浏览(90)

此问题在此处已有答案

How to convert to array with keys from first row by PHPExcel?(2个答案)
昨天关门了。
我一直很难想象如何从电子表格中提取的数组返回一个特定的数组模式。你可以参考下面的提取数组。
下面是从电子表格中提取的数组

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
        )

)

我希望返回的数组如下所示:

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

想确认array_合并函数是否可以处理这个问题吗?如有任何帮助,我们将不胜感激。
编辑:这个问题已经解决,感谢

Markus 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
        )

)

谢谢!

tkclm6bt

tkclm6bt1#

这是导入阵列的电子表格和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*(可选)是应用作结果数组索引的值的索引(数值)。如果没有,则使用源数组中的行号(从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"
    }
} */

相关问题