首页 > 解决方案 > PHP remove duplicates in foreach after substr results

问题描述

How can I remove the duplicates after my substr output in the foreach loop? Currently it outputs the stripped string in multiples. I would like the output to only list a unique "$workername" to avoid duplicates being listed

foreach ($block as $blocks) {
    $worker = $block['pools']['snowgem']['workers'];
    foreach($worker as $workers) {
        //$workers = array_unique($workers);
        $workername = substr($workers['name'], 0, strpos($workers['name'], "."));
        echo $workername."<br>";
    }
}

Sample output:

s1a5Ja3hPfP8FZgABzN8nYSU2uFgKetDTtL
s1a5Ja3hPfP8FZgABzN8nYSU2uFgKetDTtL
s1aKn13it5hsXHdUhFUXmp8f2Wj2tqo1CAi
s1aKn13it5hsXHdUhFUXmp8f2Wj2tqo1CAi
s1aKn13it5hsXHdUhFUXmp8f2Wj2tqo1CAi
s1aKn13it5hsXHdUhFUXmp8f2Wj2tqo1CAi
s1djunsw5pgbodthbrq9zGeEyKzDVvpSTEF
s1drJbyRARtXowrj4718TftHDo23RDPmKwr
s1dvGQ5d4pV4bhHBbfTUdvFHjgxgWtexm3d
s1fbJX6RRC4F4L3DxqXAKw8qmXmXw823vV1
s1hfcfXKP6vCBpAHyasEteVDrg3aQMgJZnA
s1hfcfXKP6vCBpAHyasEteVDrg3aQMgJZnA
s1hfcfXKP6vCBpAHyasEteVDrg3aQMgJZnA

Dump:

Array
(
    [pools] => Array
        (
            [snowgem] => Array
                (
                    [workers] => Array
                        (
                            [s1a5Ja3hPfP8FZgABzN8nYSU2uFgKetDTtL.MESGOrig2] => Array
                                (
                                    [name] => s1a5Ja3hPfP8FZgABzN8nYSU2uFgKetDTtL.MESGOrig2
                                    [diff] => 35226
                                    [shares] => 21.5
                                    [invalidshares] => 0
                                    [currRoundShares] => 12.9
                                    [currRoundTime] => 53.843
                                    [hashrate] => 307805989.547
                                    [hashrateString] => 615.61 Sol/s
                                    [luckDays] => 0.244
                                    [luckHours] => 5.862
                                    [paid] => 0
                                    [balance] => 0
                                )

                            [s1aKn13it5hsXHdUhFUXmp8f2Wj2tqo1CAi.1060X4] => Array
                                (
                                    [name] => s1aKn13it5hsXHdUhFUXmp8f2Wj2tqo1CAi.1060X4
                                    [diff] => 986
                                    [shares] => 3.57442495
                                    [invalidshares] => 0
                                    [currRoundShares] => 1.11351463
                                    [currRoundTime] => 103.943
                                    [hashrate] => 51173460.8742
                                    [hashrateString] => 102.35 Sol/s
                                    [luckDays] => 1.469
                                    [luckHours] => 35.260
                                    [paid] => 0
                                    [balance] => 0
                                )

标签: phpforeach

解决方案


使用一个数组来存储输出的值,并检查你是否已经输出了这个值

    $outputed_values = array();
    foreach ($block as $blocks) {
        $worker = $block['pools']['snowgem']['workers'];
        foreach($worker as $workers) {
            //$workers = array_unique($workers);
            $workername = substr($workers['name'], 0, strpos($workers['name'], "."));
            if (!in_array($workername, $outputed_values)){
               echo $workername."<br>";
               array_push($outputed_values, $workername);
            }
        }
     }

推荐阅读