4

次の形式の連想配列があります。

$input = array("one" => <class object1>,
               "two" => <class object2,
               ... //and so on);

$input のキーは一意であることが保証されています。この連想配列の 0 番目の位置に要素をmoveToHead($key)移動するメソッドも呼び出します。$input[$key]いくつか質問があります:

  1. 連想配列のインデックスを決定することは可能ですか?
  2. $key => $value対応するペアの配列エントリをインデックス 0 に移動し、そのまま保持する方法$keyは?
  3. 上記の両方の点を達成するための最良の方法は何でしょうか?

2番目のポイント(サブソリューション)にarray_flipを実行することを考えていましたがarray_flip、配列要素がintおよびstringのみの場合にのみ実行できることが後でわかりました。ポインタはありますか?

4

4 に答える 4

1

これが私が思いついたものです:

$arr = array('one' => 'Value1', 'two' => 'Value2', 'three' => 'Value3');

function moveToHead($array,$key) {
   $return = $array;
   $add_val = array($key => $return[$key]);
   unset($return[$key]);
   return $add_val + $return;
}

print_r(moveToHead($arr,'two'));

結果は

Array
(
    [two] => Value2
    [one] => Value1
    [three] => Value3
)

http://codepad.org/Jcb6ebxZ

于 2012-07-20T16:58:09.253 に答える
1

連想配列の「インデックス」がキーです。数値インデックス配列では、「キー」はインデックス番号です。

編集:私はそれを取り戻します。PHP の連想配列は順序付けされています (他の言語の順序付きマップと同様)。

しかし、おそらく、連想配列の順序付き配列が本当に必要なのでしょうか?

$input = array(array("one" => <class object1>),
               array("two" => <class object2>)
               //...
         );
于 2012-07-20T16:46:56.840 に答える
1

関数を呼び出すとarray_keys、キーのインデックスを決定できます。

$keys = array_flip(array_keys($input));
printf("Index of '%s' is: %d\n", $key, $keys[$key]);

配列を特定の位置 (たとえば先頭) に挿入するには、array_splice関数があります。したがって、挿入する配列を作成し、古い場所から値を削除して、スプライスすることができます。

$key = 'two';
$value = $input[$key];
unset($input[$key]);    
array_splice($input, 0, 0, array($key => $value));

配列ユニオン演算子でも同様のことが可能ですが、それは一番上に移動したいからです:

$key = 'two';
$value = $input[$key];
unset($input[$key]);
$result = array($key => $value) + $input;

しかし、これには よりも多くのオーバーヘッドがあると思いますarray_splice

于 2012-07-20T16:55:55.540 に答える
0

内部配列ポインター関数を使用して、必要なことを行うことができます。

$input = array(
    "one"   => "element one",
    "two"   => "element two",
    "three" => "element three",
);
reset($input); // Move to first element.
echo key($input); // "one"

unset要素を外に出して前に置くことができます:

$input = array(
    "one"   => "element one",
    "two"   => "element two",
    "three" => "element three",
);
$key = "two";
$element = $input[$key];
unset($input[$key]);
// Complicated associative array unshift:
$input = array_reverse($input);
$input[$key] = $element;
$input = array_reverse($input);
print_r($input);
于 2012-07-20T16:56:44.097 に答える