PHP在substr结果之后删除foreach中的重复项
如何在foreach循环中的substr输出之后删除重复项?目前,它以倍数输出剥离字符串。我希望输出仅列出唯一的“$workername”,以避免列出重复项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 ($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));