重命名每个 运行 上不同的数组键

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