重命名每个 运行 上不同的数组键
Renaming array keys that differ on each run
这快把我逼疯了。我有一个 PHP 脚本,其中 returns 一个 $key => $value 形式的数组,我想重命名该键以便我可以显示它在 table header 中。我看到有几种方法可以做到这一点,但我不确定它们是否是我所需要的...或者我没有正确理解示例,这很可能是问题。
基本上,每次我遍历 foreach 循环时,我的数组键都不同,而且有些键可以为空。我该如何解决这个问题?
第一个输出可能如下所示:
'_can_chaccess' => false,
'_can_chown' => false,
'_can_delete' => false,
'_can_modify' => false,
'_can_read' => true,
'assigned_to_name_879' => 'Unassigned',
'id' => 1,
'type' => 'Private::Reporting::DataViewModel::DataView_223_42858',
'type_877' => 'Email',
下一个 运行 通过,我可能会得到这个:
'_can_chaccess' => false,
'_can_chown' => false,
'_can_delete' => false,
'_can_modify' => false,
'_can_read' => true,
'assigned_to_name_793' => 'Consultants',
'id' => 1,
'object_reference_794' => 'CASE-1004',
'summary_795' => 'Deployment of New System for HQ (Project)',
'type' => 'Private::Reporting::DataViewModel::DataView_200_42858',
),
如您所见,有些键重命名相同,例如编号,类型。但是我感兴趣的最重要的每次都会改变,例如分配给名称。
有什么想法吗?
您从哪里接收数据?
您可以以某种方式修改数据源,因此如果它是一个查询(我在这里不假设),您有 SELECT ... AS .. . 语句。
首先你需要知道如何解释不断变化的键。如果例如"assigned_to_name_879" 和 "assigned_to_name_793" 是同一个字段,你可以定义一个规范函数,它将两个输入映射到一个唯一的输出。
规范函数的输出以及其他数组键可以用作附加数组的键,该数组包含输出的 table header。
因此您当前的数组是值的数组,并且您手动定义了一个 header 的数组:
数组(
'assigned_to_name_879' => 'Name assignment'
);
这种将 table header 存储在数组中的动态方式只有在您使用数组两次时才有意义。否则,您可以简单地在输出的 html-code 中写入 header。
我已经设法用下面的方法弄明白了:
$mappings_array = array();
foreach ($report['data'][0] as $key => $value) {
$workbooks->log('Old Key', $key);
preg_match_all('([^_\d]+)', $key, $new_key);
$workbooks->log('New Key', $new_key);
$str = implode(" ", $new_key[0]);
$capitalised = ucwords($str);
array_push($mappings_array,$capitalised);
}
也许这不是最好的解决方案,但它有效 :) 我得到以下输出:
> New array: «array (
0 => 'Can Chaccess',
1 => 'Can Chown',
2 => 'Can Delete',
3 => 'Can Modify',
4 => 'Can Read',
5 => 'Id',
6 => 'Total Type',
7 => 'Type',
8 => 'Type',
)
这快把我逼疯了。我有一个 PHP 脚本,其中 returns 一个 $key => $value 形式的数组,我想重命名该键以便我可以显示它在 table header 中。我看到有几种方法可以做到这一点,但我不确定它们是否是我所需要的...或者我没有正确理解示例,这很可能是问题。
基本上,每次我遍历 foreach 循环时,我的数组键都不同,而且有些键可以为空。我该如何解决这个问题?
第一个输出可能如下所示:
'_can_chaccess' => false,
'_can_chown' => false,
'_can_delete' => false,
'_can_modify' => false,
'_can_read' => true,
'assigned_to_name_879' => 'Unassigned',
'id' => 1,
'type' => 'Private::Reporting::DataViewModel::DataView_223_42858',
'type_877' => 'Email',
下一个 运行 通过,我可能会得到这个:
'_can_chaccess' => false,
'_can_chown' => false,
'_can_delete' => false,
'_can_modify' => false,
'_can_read' => true,
'assigned_to_name_793' => 'Consultants',
'id' => 1,
'object_reference_794' => 'CASE-1004',
'summary_795' => 'Deployment of New System for HQ (Project)',
'type' => 'Private::Reporting::DataViewModel::DataView_200_42858',
),
如您所见,有些键重命名相同,例如编号,类型。但是我感兴趣的最重要的每次都会改变,例如分配给名称。
有什么想法吗?
您从哪里接收数据?
您可以以某种方式修改数据源,因此如果它是一个查询(我在这里不假设),您有 SELECT ... AS .. . 语句。
首先你需要知道如何解释不断变化的键。如果例如"assigned_to_name_879" 和 "assigned_to_name_793" 是同一个字段,你可以定义一个规范函数,它将两个输入映射到一个唯一的输出。
规范函数的输出以及其他数组键可以用作附加数组的键,该数组包含输出的 table header。
因此您当前的数组是值的数组,并且您手动定义了一个 header 的数组:
数组( 'assigned_to_name_879' => 'Name assignment' );
这种将 table header 存储在数组中的动态方式只有在您使用数组两次时才有意义。否则,您可以简单地在输出的 html-code 中写入 header。
我已经设法用下面的方法弄明白了:
$mappings_array = array();
foreach ($report['data'][0] as $key => $value) {
$workbooks->log('Old Key', $key);
preg_match_all('([^_\d]+)', $key, $new_key);
$workbooks->log('New Key', $new_key);
$str = implode(" ", $new_key[0]);
$capitalised = ucwords($str);
array_push($mappings_array,$capitalised);
}
也许这不是最好的解决方案,但它有效 :) 我得到以下输出:
> New array: «array (
0 => 'Can Chaccess',
1 => 'Can Chown',
2 => 'Can Delete',
3 => 'Can Modify',
4 => 'Can Read',
5 => 'Id',
6 => 'Total Type',
7 => 'Type',
8 => 'Type',
)