【问题标题】:Find element with duplicate key value and add new key using PHP查找具有重复键值的元素并使用 PHP 添加新键
【发布时间】:2019-05-20 23:54:06
【问题描述】:

我有一个数组

$info    = array(
                [0] => array(
                            'id' => 1,
                            'uid' => '677674e21aed487fd7180da4a7619a9d'
                        ),
                [1] => array(
                            'id' => 1,
                            'uid' => 'd3c98a10fe4e42fb1fe868008c0f4cc1'
                        ),
                [2] => array(
                            'id' => 1,
                            'uid' => 'd3c98a10fe4e42fb1fe868008c0f4cc1'
                        ),
                [3] => array(
                            'id' => 1,
                            'uid' => '658284e5395a29bf34d21f30a854e965'
                        ),
                [4] => array(
                            'id' => 1,
                            'uid' => '01f33ae45a463e0c1de4ad989b3ccad5'
                        ),
                [5] => array(
                            'id' => 1,
                            'uid' => '677674e21aed487fd7180da4a7619a9d'
                        )                                       
)

如您所见,第 0 个索引和第 5 个索引的 uid 相同。同样,第二个索引和第三个索引的 uid 相同。

我想要一个 PHP 脚本,通过它我可以为重复的 uid 随机创建一个十六进制颜色代码。说这样的话。

$info    = array(
                [0] => array(
                            'id' => 1,
                            'uid' => '677674e21aed487fd7180da4a7619a9d',
                            'col' => 'black'
                        ),
                [1] => array(
                            'id' => 1,
                            'uid' => 'd3c98a10fe4e42fb1fe868008c0f4cc1',
                            'col' => 'green'
                        ),
                [2] => array(
                            'id' => 1,
                            'uid' => 'd3c98a10fe4e42fb1fe868008c0f4cc1',
                            'col' => 'green'
                        ),
                [3] => array(
                            'id' => 1,
                            'uid' => '658284e5395a29bf34d21f30a854e965'
                        ),
                [4] => array(
                            'id' => 1,
                            'uid' => '01f33ae45a463e0c1de4ad989b3ccad5'
                        ),
                [5] => array(
                            'id' => 1,
                            'uid' => '677674e21aed487fd7180da4a7619a9d',
                            'col' => 'black'
                        )                                       
)

我怎样才能以最短的执行时间做到这一点?

【问题讨论】:

  • 我很确定你真的应该知道如何在 StackOverflow 上提问。您能否展示您尝试过的示例代码?
  • 你可以使用array_count_values() 如果返回 > 1 则推入数组
  • 您是否已经有任何代码,或者您正在寻找其他人为您完成这项工作?
  • 最快的方法是提取uids,使它们成为另一个数组的键,然后遍历第一个数组并在uids 多次遇到时添加颜色。这将需要 2 次遍历源数组。

标签: php arrays


【解决方案1】:

可能有多种方法可以进行此锻炼,但由于缺乏适当的响应,我想出了这个可能更长的代码。我在这里为可能需要这个的人发布答案。

$uidArray           = array(); // creating a blank array to feed each uid
$uidDuplicateArray  = array(); // creating a blank array as container to hold duplicate uid(s) only
foreach($all_data as $key => $ad)                                                               
{
    // iterate through each item of the list
    /.................
    .................. //
    $uidArray[]     = $ad['uid'];
}
foreach(array_count_values($uidArray) as $val => $c)
{
    if($c > 1) 
    {
        // if count value is more than 1, then its duplicate
        // set the uid duplicate array with key as uid and unique color code as value
        $uidDuplicateArray[$val] = sprintf('#%06X', mt_rand(0, 0xFFFFFF));
    }
}
foreach($all_data as $keyAgain => $adg)
{
    // iterating through each item of original data
    if(isset($uidDuplicateArray[$adg['uid']]))
    {
        // if the uid is key of the duplicate array, feed the value to original array in a new key.
        $all_data[$keyAgain]['color'] = $uidDuplicateArray[$adg['uid']];
    }

}

与每个 LOC 关联的每条评论都是不言自明的。

我想要这个的原因是像这样在 UI 中标记重复项:-

【讨论】:

  • 并不是我不想帮助你,我的原则之一是不发布缺乏编码尝试的问题的答案。
  • 问题要求“最短执行时间”。为什么要发布耗时最长的代码?
  • 这将是一个起点。 “最短执行时间”是不发布编码尝试的某种借口吗?
  • 因为无论如何我都可以放代码,所以没有必要给任何借口,尤其是当我是拥有此类 repo 的用户时(正如您自己提到的那样)。
  • 我没有提到 repo,但是是的,我同意其他人的观点,对于已经在这里工作了将近 7 年并且拥有数千个代表点的人来说,你没有发布真是令人震惊一个完整的问题。
猜你喜欢
  • 1970-01-01
  • 2011-11-02
  • 2021-04-17
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多