0

这是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"
}

(只是为了好玩,我在这段代码中包含了两个双关语,试着找到它们!)

如何将此数组拆分为两个数组,一个包含所有quacks; 另一个Aaaaarrrrrggggghhhhh


请注意,它并不总是按连续顺序排列,因此可能会考虑嵌套的哈希图,例如:

  1. 查看if (isset($myarr['$found_val']))
  2. 如果找到,则附加该数组
  3. 否则用一个新数组创建那个地方

但不确定数组是如何实现的,所以可能是 O(n) 追加,在这种情况下我需要一些其他的解决方案......

4

3 回答 3

1

尝试这个

$quacks_arr = array_intersect($your_array, array('quack'));
$argh_arr   = array_intersect($your_array, array('Aaaaarrrrrggggghhhhh'));

如果你想对它们进行排序,那么只需执行 ksort

ksort($quacks_arr);
ksort($argh_arr);
于 2012-10-13T13:59:44.497 回答
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);

完全不是最佳的-难以阅读-但仍然很有趣:)

于 2012-10-13T11:59:01.877 回答
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)
于 2012-10-13T11:42:00.267 回答