1

我有一个新问题,我的思绪在燃烧,我在 php 中有一个数组

$test = array();
    Array
    (
        [0] => Array
            (
                [account] => 14319896
                [value] => 725.57
                [id] => 280
            )

        [1] => Array
            (
                [account] => 163157
                [value] => -723.57
                [id] => 283
            )

        [2] => Array
            (
                [account] => 163157
                [value] => 723.57
                [id] => 284
            )

        [3] => Array
            (
                [account] => 161817
                [value] => -723.57
                [id] => 285
            )

    )

我需要账户,它们在这个数组中不止一个,在这个例子中我需要 $test[1][id] 和 $test[2][id]

你有什么想法吗?我现在不知道更多。

谢谢你的帮助。

4

2 回答 2

4

使用帐号作为新数组中的键,计算每个条目,然后取出计数 > 1 的项目

$dupes = array();
foreach($array as $account) {
  ++$dupes[$account['account']];
}

$dupes = array_filter($dupes, function($count) { return $count > 1; });

编辑以回答问题下方的评论……</p>

如果您想要重复项的 ID(或键),请不要直接存储计数,而是使用另一个数组。

$dupes = array();
foreach($array as $key => $account) {
  if(!array_key_exists($account, $dupes))
    $dupes[$account['account']] = array();
  $dupes[$account['account']][] = $account['id']; // or: = $key
}

$dupes = array_filter($dupes, function($ids) { return count($ids) > 1; });
于 2012-12-27T20:09:01.560 回答
0

您应该将架构更改为具有关联数组,其中键是这样组织的帐号:

 Array
(
    [14319896] => Array
        (
            [0]=>Array(
                [value] => 725.57
                [id] => 280
            )
        )

    [163157] => Array
        (
            [0]=>Array(
                [value] => -723.57
                [id] => 283
             )
            [1]=>Array(
                [value] => 723.57
                [id] => 284
            )
        )

    [161817] => Array
        (
            [0]=>Array(
                [value] => -723.57
                [id] => 285
            )
        )

)


$dupes = array();
foreach($array as $key => $account) {

  $dupes[$account['account']][] = array($account['id'],$account['value']); 
}

借助该架构,您可以获得所需的一切array_filter

$dups = array_filter($dupes, function($account){ return count($account)>1;});
于 2012-12-27T20:31:44.907 回答