排序然后拆分一个PHP数组?

时间:2012-10-13 11:34:44

标签: php arrays split hashmap asymptotic-complexity

这是我的数组的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


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

  1. 检查if (isset($myarr['$found_val']))
  2. 如果找到则附加该数组
  3. 否则使用新数组创建该地点
  4. 但不确定如何实现数组,所以可以追加O(n),在这种情况下我需要一些其他的解决方案...

3 个答案:

答案 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);