1

我在 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"
           );

我怎样才能得到这个功能。

4

3 回答 3

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

看到它在行动

于 2012-04-11T07:39:03.857 回答
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");
于 2012-04-11T07:50:26.010 回答
-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"
}
于 2012-04-11T07:38:56.540 回答