这是我的数组的var_dump
:
array(6) {
[0]=> string(4) "quack"
["DOG"]=> string(4) "quack"
[1]=> string(4) "quack"
["CAT"]=> string(4) "quack"
[2]=> string(4) "Aaaaarrrrrggggghhhhh"
["CAERBANNOG"]=> string(4) "Aaaaarrrrrggggghhhhh"
}
(只是为了好玩,我在这段代码中包含了两个双关语,尝试找到它们!)
quack
个数组;另一个Aaaaarrrrrggggghhhhh
?请注意,它并不总是按顺序排列,因此可能会考虑使用嵌套的哈希映射,例如:
if (isset($myarr['$found_val']))
但不确定如何实现数组,所以可以追加O(n),在这种情况下我需要一些其他的解决方案...
答案 0 :(得分:1)
您可以根据值对它们进行分组并存储密钥
$array = array(0 => "quack","DOG" => "quack",1 => "quack","CAT" => "quack",2 => "Aaaaarrrrrggggghhhhh","CAERBANNOG" => "Aaaaarrrrrggggghhhhh");
$final = array();
foreach ( $array as $key => $value ) {
if (! array_key_exists($value, $final)) {
$final[$value] = array();
}
$final[$value][] = $key;
}
var_dump($final);
输出
array
'quack' =>
array
0 => int 0
1 => string 'DOG' (length=3)
2 => int 1
3 => string 'CAT' (length=3)
'Aaaaarrrrrggggghhhhh' =>
array
0 => int 2
1 => string 'CAERBANNOG' (length=10)
答案 1 :(得分:1)
以防万一有人想以更奇怪的方式做到这一点:
已更新,air4x的想法是仅使用单个项目数组,而不是array_fill(0,count($a),$v)
。使它更明智。
$a = array(
0 => "quack",
"DOG" => "quack",
1 => "quack",
"CAT" => "quack",
2 => "Aaaaarrrrrggggghhhhh",
"CAERBANNOG" => "Aaaaarrrrrggggghhhhh"
);
$b = array();
foreach( array_unique(array_values($a)) as $v ) {
$b[$v] = array_intersect($a, array($v));
}
echo '<xmp>';
print_r($b);
完全不是最佳的 - 难以阅读 - 但仍然很有趣:)
答案 2 :(得分:1)
试试这个
$quacks_arr = array_intersect($your_array, array('quack'));
$argh_arr = array_intersect($your_array, array('Aaaaarrrrrggggghhhhh'));
如果你想对它们进行排序,那就去做ksort
ksort($quacks_arr);
ksort($argh_arr);