我来自数据库表的字符串是$ needle。 如果te needle不在我的数组中,那么我想将它添加到我的数组中。
如果它在我的阵列中,那么只要它只有两次,那么我仍然 想要将它添加到我的数组中(所以最多三次)
为了检查是否$ needle在我的$ haystack数组中,是吗? 需要使用strpos()循环遍历数组还是有更快的方法?
表中有很多针,所以我开始循环 选择结果。
这是我想要做的示意图......
$haystack = array();
while( $row = mysql_fetch_assoc($result)) {
$needle = $row['data'];
$num = no. of times $needle is in $haystack // $haystack is an array
if ($num < 3 ) {
$$haystack[] = $needle; // hopfully this adds the needle
}
} // end while. Get next needle.
有谁知道我该怎么做:
$ num =不。 $ needle在$ haystack中的次数
谢谢
答案 0 :(得分:1)
您的意思是array_count_values()返回所有唯一值的出现次数吗?
<?php
$a=array("Cat","Dog","Horse","Dog");
print_r(array_count_values($a));
?>
上面代码的输出将是:
Array (
[Cat] => 1,
[Dog] => 2,
[Horse] => 1
)
答案 1 :(得分:1)
您可以使用array_count_values()首先生成包含每个值的频率的地图,然后只有在地图中的值计数为&lt; 3,例如:
$original_values_count = array_count_values($values);
foreach ($values as $value)
if ($original_values_count[$value] < 3)
$values[] = $value;
由于无法完全避免循环,我认为在速度方面选择使用本机PHP函数是个好主意,而不是手动循环所有值。
答案 2 :(得分:0)
还有array_map()函数,它将给定函数应用于数组的每个元素。
答案 3 :(得分:0)
可能是以下情况?只是改变了Miek的代码。
$haystack_count = array_count_values($haystack);
if ($haystack_count[$needle] < 3)
$haystack[] = $needle;