【问题标题】:PHP check if value in array of objects exists more than oncePHP检查对象数组中的值是否存在不止一次
【发布时间】:2021-07-27 05:11:45
【问题描述】:

我这里有一个包含多个对象的数组:

$batches = [
    [
        'id' => 2,
        'number' => 'ABC'
    ],
    [
        'id' => 3,
        'number' => 'ABC'
    ],
    [
        'id' => 4,
        'number' => 'DEF'
    ]
];

现在我需要知道是否存在不止一次的数字。在这种情况下,它是ABC

我尝试过使用 array_sumarray_column 但这似乎只适用于数字:

$test = array_sum( array_column( $batches, 'number' ) );

【问题讨论】:

  • 你为什么要使用array_sum()?它们不是数字,不能相加。
  • 我认为它可能会计算出现次数,但我错了。
  • 即使它们是数字,如果有重复,它怎么告诉你?
  • 你在想array_count_values()
  • @miken32 我也不认为这是对的。这是在查找关联数组的特定键。

标签: php


【解决方案1】:

使用array_count_values() 计算重复次数。然后,您可以将其过滤为仅计数大于 1 的那些。

$results = array_keys(
    array_filter(array_count_values(array_column($batches, 'number')),
                 static function($count) { return $count > 1; }));

【讨论】:

  • 太棒了!这就是我要找的!谢谢巴尔玛 :)
  • 我不确定将其声明为静态有什么好处。
  • 我就是这么学的,所以我认为它可能是正确的。我认为这只是一个风格决定。
  • 来自文档:匿名函数可以静态声明。这可以防止它们自动将当前类绑定到它们。 除非代码在类中,否则没有任何区别。
  • 感谢您的解释。现在说得通了。
猜你喜欢
  • 1970-01-01
  • 2014-09-01
  • 2017-03-22
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多