PHP在substr结果之后删除foreach中的重复项

PHP在substr结果之后删除foreach中的重复项,php,foreach,Php,Foreach,如何在foreach循环中的substr输出之后删除重复项?目前,它以倍数输出剥离字符串。我希望输出仅列出唯一的“$workername”,以避免列出重复项 foreach ($block as $blocks) { $worker = $block['pools']['snowgem']['workers']; foreach($worker as $workers) { //$workers = array_unique($workers);

如何在foreach循环中的substr输出之后删除重复项?目前,它以倍数输出剥离字符串。我希望输出仅列出唯一的“$workername”,以避免列出重复项

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>";
    }
}
转储:


使用数组存储输出的值,并检查是否已输出此值

    $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);
            }
        }
     }
$outputted_values=array();
foreach($block作为$blocks){
$worker=$block['pools']['snowgem']['workers'];
foreach($worker作为$workers){
//$workers=array_unique($workers);
$workername=substr($workers['name',0,strpos($workers['name',”);
if(!in_数组($workername,$outputed_值)){
echo$workername。“
”; 数组推送($outputted_值,$workername); } } }
您在中已具有正确的功能。只需将子字符串存储在数组中,然后获取唯一值并输出它们

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'], "."));
        $name_array[] = $workername;
    }
    $name_array = array_unqiue($name_array);
    echo "<pre>";
    print_r($name_array);
    echo "</pre>";
}
foreach($block作为$blocks){
$worker=$block['pools']['snowgem']['workers'];
foreach($worker作为$workers){
//$workers=array_unique($workers);
$workername=substr($workers['name',0,strpos($workers['name',”);
$name_array[]=$workername;
}
$name\u array=array\u unqiue($name\u array);
回声“;
打印(名称数组);
回声“;
}

似乎不需要外部foreach循环,因为顶层只有一个键。您只需直接转到嵌套的“worker”键即可获取worker

$unique_names = array_unique(array_map(function($worker) {
    return substr($worker['name'], 0, strpos($worker['name'], "."));
}, $workers));
然后,您可以在重新格式化后从该数组获得的名称列表上使用
array\u unique


你能举一个输入数据的例子吗?看起来您是从foreach中迭代的数组中提取
$worker
,而不是当前迭代中的数组项。啊,这正是我需要做的。感谢您的代码肯定会占用更少的磁盘空间。你能解释一下为什么不需要外部foreach吗?难道作为块索引的每个块(只是注意到它们的命名也在foreach中交换)不都有自己的“pool”键吗?不是我的问题,只是curious@TCooper我相信var_dump显示了整个输入数据的截断样本,因此实际上没有多个块,而池是一个顶级键。但是,我肯定会弄错:)
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'], "."));
        $name_array[] = $workername;
    }
    $name_array = array_unqiue($name_array);
    echo "<pre>";
    print_r($name_array);
    echo "</pre>";
}
$workers = $block['pools']['snowgem']['workers'];
$unique_names = array_unique(array_map(function($worker) {
    return substr($worker['name'], 0, strpos($worker['name'], "."));
}, $workers));