使用 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"
}
} */
我一直难以想象如何从我从电子表格 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"
}
} */