关联数组推送移位项

时间:2012-04-11 07:25:21

标签: php arrays algorithm

我在PHP中有一个关联数组。

$myarray = array(
                  "a"=>"News",
                  "b"=>"Articles",
                  "c"=>"images"
                );

我想在“a”键后插入一些值。这样,数组的结构就变成了

$myarray = array(
           "a"=>"News",
           "j"=>"Latest News",  
           "k"=>"Sports News",
           "l"=>"Entertainment",  
           "b"=>"Articles",
           "c"=>"images"
           );

我如何才能获得此功能。

3 个答案:

答案 0 :(得分:2)

这个函数是array_splice,但是你必须手动完成一些工作,因为它不保存密钥。让我们做到这一点:

function search_and_insert($input, $afterKey, $newItems) {
    $keys = array_keys($input);
    $insertPosition = array_search($afterKey, $keys);
    if ($insertPosition === false) {
        return false;
    }
    ++$insertPosition;

    $newKeys = array_keys($newItems);
    array_splice($keys, $insertPosition, 0, $newKeys);
    array_splice($input, $insertPosition, 0, $newItems);
    return array_combine($keys, $input);
}

这里的想法是你分别处理键和值,为每个数组拼接一次,然后使用array_combine来获得最终结果。另一个好主意是使用相同的技术编写可重用的array_splice_assoc函数,并使用它而不是仅使用一个来执行此特定作业。

用法:

$myarray = array("a"=>"News", "b"=>"Articles", "c"=>"images");
$newItems = array("j"=>"Latest News", "k"=>"Sports News", "l"=>"Entertainment");
$insertAfter = "a";

print_r(search_and_insert($myarray, "a", $newItems));

<强> See it in action

答案 1 :(得分:0)

使用它在数组中的特定键之后插入新的键/值:

 function array_insert_after($key, array &$array, $new_key, $new_value) {
      if (array_key_exists($key, $array)) {
        $new = array();
        foreach ($array as $k => $value) {
          $new[$k] = $value;
          if ($k === $key) {
            $new[$new_key] = $new_value;
          }
        }
        return $new;
      }
      return FALSE;
    }

用法:

$array = array("a"=>"News", "b"=>"Articles", "c"=>"images");

array_insert_after("a", $array, "j", "Latest News");

答案 2 :(得分:-1)

使用array_splice

时,不会保留数组键
<?php
$myarray = array(
                  "a"=>"News",
                  "b"=>"Articles",
                  "c"=>"images"
                );

$newarray = array(
                "j"=>"Latest News",
                "k"=>"Sports News",
                "l"=>"Entertainment");

var_dump($myarray);

array_splice($myarray, 1, 0, $newarray);

var_dump($myarray);
?>

<强>输出

array(3) {
  ["a"]=>
  string(4) "News"
  ["b"]=>
  string(8) "Articles"
  ["c"]=>
  string(6) "images"
}

array(6) {
  ["a"]=>
  string(4) "News"
  [0]=>
  string(11) "Latest News"
  [1]=>
  string(11) "Sports News"
  [2]=>
  string(13) "Entertainment"
  ["b"]=>
  string(8) "Articles"
  ["c"]=>
  string(6) "images"
}