添加到数组,如果它还没有

use*_*821 60 php

如果元素不在那里,我如何添加元素?我有以下内容:

$a=array();
// organize the array
foreach($array as $k=>$v){
    foreach($v as $key=>$value){
        if($key=='key'){
        $a[]=$value;
        }
    }
}

print_r($a);
Run Code Online (Sandbox Code Playgroud)

//输出

Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 1
[4] => 2
[5] => 3
[6] => 4
[7] => 5
[8] => 6

)
Run Code Online (Sandbox Code Playgroud)

相反,我希望$ a由唯一值组成.(我知道我可以使用array_unique来获得所需的结果,但我只是想知道)

Mar*_*ulz 110

您应该使用PHP函数in_array(请参阅http://php.net/manual/en/function.in-array.php).

if (!in_array($value, $array))
{
    $array[] = $value; 
}
Run Code Online (Sandbox Code Playgroud)

这就是文档中所说的in_array:

如果在数组中找到了针,则返回TRUE,否则返回FALSE.

  • 这是迄今为止最简单的方法 (3认同)

ont*_*ia_ 63

您必须针对in_array检查每个值:

$a=array();
// organize the array by cusip
foreach($array as $k=>$v){
    foreach($v as $key=>$value){
        if(!in_array($value, $a)){
        $a[]=$value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 随着输入数据量的增加,“in_array()”的性能会越来越差。 (4认同)

Gum*_*mbo 29

由于您似乎只有标量值,因此PHP的数组更像是一个哈希映射,您可以使用该值作为键来避免重复,并将$k键与它们关联以便能够获取原始值:

$keys = array();
foreach ($array as $k => $v){
    if (isset($v['key'])) {
        $keys[$value] = $k;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你只需要迭代它来获得原始值:

$unique = array();
foreach ($keys as $key) {
    $unique[] = $array[$key]['key'];
}
Run Code Online (Sandbox Code Playgroud)

这可能不是最明显和最全面的方法,但它在O(n)中非常有效.

in_array与其他人建议使用可能更直观.但是你最终会得到O(n 2)(in_array在O(n)中)不适用的算法.即使推送数组中的所有值并使用array_unique它也会比in_array(array_unique对O(n ·log n)中的值进行排序然后删除连续的重复项).


Sou*_*rav 11

if (!in_array(...))  
  array_push(..)
Run Code Online (Sandbox Code Playgroud)


pes*_*nko 8

易于编写,但不是最有效的:

$array = array_unique(array_merge($array, $array_to_append));
Run Code Online (Sandbox Code Playgroud)

这个可能更快:

$array = array_merge($array, array_diff($array_to_append, $array));
Run Code Online (Sandbox Code Playgroud)


Cri*_*tiC 5

if (!in_array($value, $a))
  $a[]=$value;
Run Code Online (Sandbox Code Playgroud)