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

ここでの考え方は、キーと値を別々に処理し、配列ごとに1回スプライシングし、その後、を使用array_combineして最終結果を取得することです。もう1つの良いアイデアは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 に答える