【问题标题】:First value duplicate in array while using array_search function使用 array_search 函数时数组中的第一个值重复
【发布时间】:2019-04-04 10:26:57
【问题描述】:

我正在尝试根据客户端 ID 从二维数组中删除重复项。该脚本会删除除第一个值、第一个客户端之外的所有重复项。

我尝试了其他几种方法将 array_search 的结果与不同的值进行比较,尝试使用 !== 和 === 却没有得到有希望的结果。

将非数值作为数组的第一个插入,可以完美地消除重复数据。

代码如下:

// Build client list
$ClientList = array();
$counter = 0;
foreach ($ClientTrans as $order => $value) {
    $ClientId = $ClientTrans[$order]['customer_id'];
if (array_search($ClientId, array_column($ClientList, 0)) == FALSE && is_numeric($ClientId)) {
        $ClientList[$counter][] = $ClientId;
        $counter += 1;
    }
}

最终结果是一个客户端和一个二维数组的求和值。除了第一个客户端,它在新的构建客户端列表中多次出现,没有重复。

这是输入数组

Array ( 
    [0] => Array ( 
            [customer_id] => 50245901 
            [points] => 299 
    ) 
    [1] => Array ( 
            [customer_id] => 50245907 
            [points] => 3847 
    ) 
    [2] => Array (
            [customer_id] => 50245908 
            [points] => 159 
    ) 
    [3] => Array ( 
            [customer_id] => 50245910 
            [points] => 3175 
    ) 
    [4] => Array ( 
            [customer_id] => 50245914 
            [points] => 641 
    ) 
    [5] => Array ( 
            [customer_id] => 50245916 
            [points] => 449 
    ) 
    [6] => Array ( 
            [customer_id] => 50245921 
            [points] => 551 
    ) 
    [7] => Array ( 
            [customer_id] => 50245927 
            [points] => 0 
    ) 
    [8] => Array ( 
            [customer_id] => 50245928 
            [points] => 602 
    ) 
    [9] => Array ( 
            [customer_id] => 50245929 
            [points] => 495 
    )
    [10] => Array ( 
            [customer_id] => 50245931 
            [points] => 539 
    ) 
    [11] => Array ( 
            [customer_id] => 50245941 
            [points] => 0 
    ) 
    [12] => Array ( 
            [customer_id] => 50245901 
            [points] => 124 
    ) 
    [13] => Array ( 
            [customer_id] => 50245901 
            [points] => 512 
    )
)

所需的输出 - 客户 ID 50245901 没有多次出现:

Array ( 
    [0] => Array ( 
            [customer_id] => 50245901 
    ) 
    [1] => Array ( 
            [customer_id] => 50245907 
    ) 
    [2] => Array ( 
        [customer_id] => 50245908 
    ) 
    [3] => Array ( 
        [customer_id] => 50245910 
    ) 
    [4] => Array ( 
        [customer_id] => 50245914 
    ) 
    [5] => Array ( 
        [customer_id] => 50245916 
    ) 
    [6] => Array ( 
        [customer_id] => 50245921 
    ) 
    [7] => Array ( 
        [customer_id] => 50245927 
    ) 
    [8] => Array ( 
        [customer_id] => 50245928 
    ) 
    [9] => Array ( 
        [customer_id] => 50245929 
    ) 
    [10] => Array ( 
        [customer_id] => 50245931 
    )
)

【问题讨论】:

  • 你能展示一下你的输入数组是什么样子的吗?预期的结果应该是什么?
  • 请发布输入数组值以及您最终想要的预期结果
  • 你好。我已将数组值示例和结果添加到问题中。
  • 我看到了两种有趣但不同的解决方法,但有没有人知道为什么会发生这种情况,第一个数组的值不断增加自己?是不是因为 False == 0 并且它在数组中的位置是 0?

标签: php arrays multidimensional-array array-column


【解决方案1】:

您需要简化您的foreach(),如下所示:-

$ClientList = array();

foreach ($ClientTrans as $order => $value) {
    $ClientList[$value['customer_id']]['customer_id'] = $value['customer_id'];
}
$ClientList = array_values($ClientList);

输出:-https://3v4l.org/f7Bfn

【讨论】:

  • 非常感谢。这种方式非常有效。虽然我仍然对原始代码中由数组搜索引起的问题感到困惑。
【解决方案2】:

你可以简单地写代码,

$arr = array_values(array_unique(array_column($arr, 'customer_id')));
$temp = [];
array_walk($arr, function(&$item,$key) use(&$temp){
    $temp[]['customer_id'] = $item; 
});
print_r($temp);

array_values — 返回数组的所有值
array_unique — 从数组中删除重复值
array_column — 从输入数组中的单个列返回值
@987654324 @ — 将用户提供的函数应用于数组的每个成员

Demo.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-26
    • 2015-04-05
    • 2017-03-04
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多