重命名每次运行时不同的数组键

时间:2015-03-15 22:15:21

标签: php arrays key rename

这让我很生气..我有一个PHP脚本,它以$ key =>格式返回一个数组$ value,我想重命名密钥,以便我可以在表头中显示它。我看到有几种方法可以做到这一点,但我不确定它们是我需要的......或者我没有正确理解这些例子,这可能就是问题。

基本上,每次迭代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',
),

如您所见,某些键重命名相同,例如id,类型。但是我感兴趣的最重要的每次都会改变,例如分配给姓名。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您从哪里收到数据?

您可以以某种方式修改数据源,因此如果它是一个查询(我在此不假设),您可以使用 SELECT ... AS ... 语句。

首先,您需要知道如何解释更改密钥。如果是“assigned_to_name_879”和“assigned_to_name_793”是相同的字段,您可以定义规范函数,该函数将两个输入映射到唯一输出。

cannonical函数的输出以及其他数组键可以作为附加数组的键,其中包含输出的表头。

因此,您当前的数组是值的数组,您可以手动定义标题的数组:

阵列(  'assigned_to_name_879'=> '姓名分配' );

如果您使用数组两次,这种将表头存储在数组中的动态方式才有意义。否则,您只需在输出的html代码中编写标题即可。

答案 1 :(得分:0)

我已经设法使用以下内容解决了这个问题:

 $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',
)