Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在for循环中使用唯一数组_Php_Arrays_Word_Unique - Fatal编程技术网

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

Php 如何在for循环中使用唯一数组,php,arrays,word,unique,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;

我想在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,键为0,2


我是如何使用它的。

在进入循环之前,请这样做

$yourarray = array_values(array_unique($repeated_values_array));
现在在for循环中使用$yourarray

如注释中所述,如果不需要,则不需要为键分配变量。我只是用它作为一个方便的参考。因此,您可以简单地执行以下操作:

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

看起来您需要的是重基数组键。 如本文所述:

所以使用

$array = array_values($array);
使用PHP的foreach函数

 foreach($unique as $val)
 {   
      echo $val;
      echo  '<option value="'.$val.'">'.$val.'</option>';
 }  
使用foreach而不是for循环

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

foreach ($unique as $key=>$value)
其中$key将是数组键。

请阅读。数组_unique不会重置数组键。此外,for循环非常好,但foreach是一种更适合处理数组和对象的语言构造。 也就是说,应用array_unique后重置数组键的最快方法是对数组进行排序:

$a = array( 'Pritesh','Pritesh','Nilesh' );
$b = array_unique($a);
sort($b);
var_dump($b);
这导致:

array(2) {
  [0]=>
  string(6) "Nilesh"
  [1]=>
  string(7) "Pritesh"
}
适用于for和foreach

编辑: 正如编程TMTOWTDI时经常出现的情况一样,有多种方法可以做到这一点。这里有几种方法,从有效到荒谬:

快速:

foreach($uniques as $unique) echo '<option value="', $unique, '">', $unique,'</option>';
与以前版本的不同之处在于,您也可以在此处将foreach替换为for,并且$uniques数组将再次正确索引。元素的顺序可能已更改。 如果元素的顺序很重要,并且您想要一个索引整齐的数组,请使用:

$uniques = array_values($uniques);//as Shankar Damodaran suggested
当您的用例适合上面描述的非常具体且不太可能的场景时使用。 或者,事情从这里开始变得荒谬起来:

function keepOrder($a, $b)
{
    return 0;
}
usort($uniques, 'keepOrder);
用法:从不

由于我们在过度设计解决方案方面走得相当远,让我们将其延伸到解决方案再次成为问题的地方警告,以下代码可能会导致您的眼睛出血:

我故意使上面的代码更难阅读,以避免任何人使用它。 何时使用:当你临床上精神错乱,或者想看到一个同事穿着紧身衣被带走,大声喊着恐怖,恐怖时使用。
严肃地说:不要使用它。

使用foreach而不是foreach。我不禁想知道如何获得这些非唯一值。array\u值返回另一个数组。这段代码可能是一个单行程序,但它接受一个数组,创建一个新的、只有唯一值的数组,然后创建一个只有唯一值的第三个数组。排序重置数组的键,而不重新创建唯一数组。排序不是正确的做法。如果要将这些值保持在相同的位置怎么办?如果是这种情况,排序就不对,除非将usort与函数keeporter$a、$b{return 0;}一起使用,但这很愚蠢。在本例中,OP没有提到他关心元素的顺序,因此我不认为元素的顺序是相关的。我对我的答案进行了一些编辑,如果OP希望保证键的完整性并且不改变数组中元素的顺序,建议您的答案。我还添加了一些愚蠢的解决方案,为了好玩,如果不打算使用$key,为什么还要麻烦foreach$uniques作为$key=>$unique,在每次迭代中分配2个变量?foreach$uniques as$unique写起来更短,速度稍快,并且只迭代您需要的内容:值我认为最好包含键变量,因为OP可能不知道这种语法。性能不是这里的问题。但你肯定是对的。我已经编辑了我的答案,将这两个结构都包括在内。现在,因为我已经学究了:最有效的回音不会连接字符串,而是用逗号分隔它们。
$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;