SをPHPの連想配列とすると、最初の要素(値とキーの両方)を取得して抽出する必要があります。
私は使うだろう
value1=array_pop(S);
しかし、それは私に価値を与えるだけです。
私は使えます
K=array_keys(S);
key1=array_pop(K);
value1=array_pop(S);
ただし、同じデータの2つのコピーが必要になるため、複雑になります。配列自体が配列の配列の要素であるため、WHichは混乱を招きます。抽出中にカップルのキー/値を読み取るよりエレガントな方法が必要です。
_$value = reset($arr);
$key = key($arr);
_
(この順序で)
reset()
PHPマニュアル 、key()
PHPマニュアル 。
_unset($arr[$key]); # in case you want to remove it.
_
ただしarray_pop()
PHPマニュアル は最後の要素を処理しています:
_$value = end($arr);
$key = key($arr);
unset($arr[$key]); # in case you want to remove it.
_
end()
PHPマニュアル 。
_list($value, $key) = array(end($arr), key($arr));
_
または
_extract(array('value'=>end($arr), 'key'=>key($arr)));
_
または
_end($arr);
list($key, $value) = each($arr);
_
またはあなたが好きな遊びのどんなスタイル;)
これまで、空の配列を処理するために欠けていました。したがって、最後の(最初の)要素があるかどうかを確認する必要があります。ない場合は、_$key
_をnull
に設定します(null
は配列キーにできないため)。
_for($key=null;$key===null&&false!==$value=end($arr);)
unset($arr[$key=key($arr)]);
_
これは$arr = array('first' => '1st', 'last' => '2nd.');
のような塗りつぶされた配列を提供します:
_string(4) "2nd." # value
string(4) "last" # key
array(1) { # leftover array
["first"]=>
string(3) "1st"
}
_
そして空の配列:
_bool(false) # value
NULL # key
array(0) { # leftover array
}
_
unset()
が信頼できない場合は、必要なパフォーマンスが得られます(メトリックを実行していませんが、実際には問題ないと思います)。ネイティブのarray_pop()
実装も(ただし、言語構造としてのunset()
の方がはるかに高速であると私は本当に思っています):
_end($arr);
$key = key($arr);
$value = array_pop($arr);
_
$arr = array('k1' => 'v1', 'k2' => 'v2', 'k3' => 'v3');
$a = array_slice($arr, 0, 1);
var_dump($a);
$arr = array_slice($arr, 1);
var_dump($arr);
array(1) {
["k1"]=>
string(2) "v1"
}
array(2) {
["k2"]=>
string(2) "v2"
["k3"]=>
string(2) "v3"
}
$value = reset($array);
$key = key($array);
編集:ハクレは私にそれを打ち負かしました:-)
list($value, $key) = array(reset($s), key($s));
array_shift($s); // or just unset($s[$key]);
もちろん、最初のステートメントを2つに分割できます。