我如何在for循环中使用唯一数组

时间:2013-12-19 07:14:39

标签: php arrays word unique

我想在for循环中使用唯一数组。请看我的代码。

Array ( [0] => Pritesh [1] => Pritesh [2] => Nilesh )

现在我使用“UNIQUE”功能获取唯一值

 Array ( [0] => Pritesh [2] => Nilesh ) 

但现在的问题是当我使用for循环时

for($p = 0; $p < count($unique); $p++)
    {   echo $uniques;
        echo  '<option value="'.$unique[$p].'">'.$unique[$p].'</option>';
    }   

因此第二个值显示为空白,因为数组计数为2且Key为0.2。

我如何使用它。

6 个答案:

答案 0 :(得分:4)

在你进入循环之前这样做..

$yourarray = array_values(array_unique($repeated_values_array));

现在在 $yourarray 循环中使用for

答案 1 :(得分:2)

foreach($uniques as $key => $unique) {
  echo '<option value="'.$unique.'">'.$unique.'</option>';
}

如评论中所述,如果您不需要,则无需为密钥分配变量。 (我刚刚使用的是一个方便的参考)。所以你可以这样做:

foreach($uniques as $unique) {
  echo '<option value="'.$unique.'">'.$unique.'</option>';
}

答案 2 :(得分:2)

请阅读the manualarray_unique 重置数组键。此外,for循环一切都很好,但foreach是一种更适合处理数组(和对象)的语言结构。
也就是说,应用array_unique后重置数组密钥的最快方法是sort数组:

$a = array( 'Pritesh','Pritesh','Nilesh' );
$b = array_unique($a);
sort($b);
var_dump($b);

这导致:

array(2) {
  [0]=>
  string(6) "Nilesh"
  [1]=>
  string(7) "Pritesh"
}

哪个适用于forforeach

编辑:
编程TMTOWTDI通常就是这种情况(有多种方法可以做到)。这里有几种方法,从有效到荒谬:

快速:

foreach($uniques as $unique) echo '<option value="', $unique, '">', $unique,'</option>';

是的,这些是逗号,逗号的+回声实际上比串联更快(~20-30%) 何时使用:无论什么时候你都喜欢它,它不会改变$uniques数组(所以它仍然是不一致的索引),但是它很容易阅读。

修复$uniques索引:

sort($uniques);
foreach($uniques as $unique) echo '';//same deal

与以前版本的不同之处在于,您也可以在此处将foreach替换为for,并且$uniques数组将再次正确编入索引。元素的顺序可能已更改 如果元素的顺序很重要,并且您想要一个整齐的索引数组,请使用:

$uniques = array_values($uniques);//as Shankar Damodaran suggested

当您的用例符合上述特定且不太可能的情况时使用 或者, 从这里开始变得荒谬:

function keepOrder($a, $b)
{
    return 0;
}
usort($uniques, 'keepOrder);

使用: 从不

由于我们 在过度设计解决方案方面取得了相当大的进展,让我们将其解决为解决方案再次成为问题的延伸(警告,以下代码可能会导致眼睛出血):

//get the highest key in array, add 1
$max = max(array_keys($uniques)) + 1;
for($i=0;$i<$max;++$i) if (isset($uniques[$i])) echo $unique;

我故意让上面的代码更难以阅读,以避免任何人使用它 何时使用: 在您临床疯狂时使用,或者想看到一名同事被束缚带走,大喊“恐怖,恐怖”
说真的:不要用它。

答案 3 :(得分:1)

使用PHP的foreach功能

 foreach($unique as $val)
 {   
      echo $val;
      echo  '<option value="'.$val.'">'.$val.'</option>';
 }  

答案 4 :(得分:1)

使用foreach代替for循环

如果您还需要密钥,请执行以下操作:

foreach ($unique as $key=>$value)

其中$key将是数组键。

答案 5 :(得分:0)

似乎你需要的是“rebase数组键”。 正如本文所述:Rebase array keys

所以使用

$array = array_values($array);