如果元素不在那里,我如何添加元素?我有以下内容:
$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.
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)
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)中的值进行排序然后删除连续的重复项).
易于编写,但不是最有效的:
$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)
| 归档时间: |
|
| 查看次数: |
109913 次 |
| 最近记录: |