【问题标题】:Renaming array keys that differ on each run重命名每次运行时不同的数组键
【发布时间】:2015-05-17 23:28:02
【问题描述】:

这快把我逼疯了。我有一个 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',
),

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

有什么想法吗?

【问题讨论】:

    标签: php arrays key rename


    【解决方案1】:

    您从哪里接收数据?

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

    首先,您需要知道如何解释不断变化的键。如果例如“assigned_to_name_879”和“assigned_to_name_793”是同一个字段,您可以定义一个规范函数,将两个输入映射到一个唯一的输出。

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

    所以你当前的数组是值的数组,你手动定义了一个标题的数组:

    数组( 'assigned_to_name_879' => '名称分配' );

    这种将表头存储在数组中的动态方式仅在您使用该数组两次时才有意义。否则,您可以简单地在您输出的 html 代码中编写标题。

    【讨论】:

    • 感谢您的回复。不幸的是,我无法修改源,我正在使用 CRM API 来检索数据,这就是我得到的响应。分配给字段的两种变体都是相同的。
    • 你有我如何写上面的例子吗,我理解这个概念..这只是我挣扎的语法。
    • 您到底需要什么代码。请用你自己的单词说出来,因为我的回答包含不止一个想法。
    • 我正在从 MYSQL 数据库中检索报告,其中字段名称对报告来说是唯一的,因此每次遍历 foreach 循环时,我都会返回不同的报告,从而返回不同的列标题。列标题在结果表中显示给用户,因此具有assigned_to_name_769 或对用户没有真正意义的任何内容。使用下面的示例,我设法将其格式化为更用户友好的内容。
    【解决方案2】:

    我已经设法用下面的方法弄清楚了:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-16
      • 2013-11-29
      • 2021-12-11
      • 1970-01-01
      • 2020-05-28
      • 2018-04-21
      • 2011-03-20
      • 2022-01-21
      相关资源
      最近更新 更多