連想配列がある場合:
Array
(
[uid] => Marvelous
[status] => 1
[set_later] => Array
(
[0] => 1
[1] => 0
)
[op] => Submit
[submit] => Submit
)
そして、2番目の項目にアクセスしたいのですが、どうしますか? $arr[1]
は機能していないようです:
foreach ($form_state['values']['set_later'] as $fieldKey => $setLater) {
if (! $setLater) {
$valueForAll = $form_state['values'][$fieldKey];
$_SESSION[SET_NOW_KEY][array_search($valueForAll, $form_state['values'])] = $valueForAll; // this isn't getting the value properly
}
}
このコードは以下を生成することになっています。
$_SESSION[SET_NOW_KEY]['status'] = 1
ただし、空のエントリが生成されるだけです。
使用する - array_slice
$second = array_slice($array, 1, 1, true); // array("status" => 1)
// or
list($value) = array_slice($array, 1, 1); // 1
// or
$blah = array_slice($array, 1, 1); // array(0 => 1)
$value = $blah[0];
私は少し混乱しています。コードに配列の正しいキーがないようです。ただし、配列の2番目の要素だけを取得する場合は、次のように使用できます。
$keys = array_keys($inArray);
$key = $keys[1];
$value = $inArray[$key];
しかし、あなたがしようとしているように見えるものを検討した後、このような何かがうまくいくかもしれません:
$ii = 0;
$setLaterArr = $form_state['values']['set_later'];
foreach($form_state['values'] as $key => $value) {
if($key == 'set_later')
continue;
$setLater = $setLaterArr[$ii];
if(! $setLater) {
$_SESSION[SET_NOW_KEY][$key] = $value;
}
$ii ++;
}
それは役立ちますか? set_later値が設定されていない場合、セッション値を設定しようとしているようです。上記のコードはこれを行います。ただし、内部配列を反復処理する代わりに、外部配列を反復処理し、インデックスを使用して内部配列内の位置を追跡します。これは合理的にパフォーマンスが高いはずです。
array_slice
2番目のアイテムを取得するには:
$a= array(
'hello'=> 'world',
'how'=> 'are you',
'an'=> 'array',
);
$second= array_slice($a, 1, 1, true);
var_dump($second);
array_slice および current でそれを行う1行の方法を次に示します。
$value = current(array_slice($array, 1, 1)); // returns value only
ここでの応答はすべて、配列の形成方法に関係なく、2番目の要素を取得することに焦点を当てています。
これがあなたの場合です。
Array
(
[uid] => Marvelous
[status] => 1
[set_later] => Array
(
[0] => 1
[1] => 0
)
[op] => Submit
[submit] => Submit
)
次に、$array['status']
を介して2番目の要素の値を取得できます。
また、このコード
foreach ($form_state['values']['set_later'] as $fieldKey => $setLater) {
if (! $setLater) {
$valueForAll = $form_state['values'][$fieldKey];
$_SESSION[SET_NOW_KEY][array_search($valueForAll, $form_state['values'])] = $valueForAll; // this isn't getting the value properly
}
}
何をしようとしているのか理解できません。
最初の例で指定した配列が$ form_stateに対応する場合、
$form_state['values']['set_later'][1]
働くでしょう。
さもないと
$i = 0;
foreach ($form_state['values']['set_later'] as $fieldKey => $setLater) {
if ($i == 1) {
$valueForAll = $form_state['values'][$fieldKey];
$_SESSION[SET_NOW_KEY][$fieldKey] = $setLater;
continue;
}
$i++;
}
/**
* Get nth item from an associative array
*
*
* @param $arr
* @param int $nth
*
* @return array
*/
function getNthItemFromArr($arr, $nth = 0){
$nth = intval($nth);
if(is_array($arr) && sizeof($arr) > 0 && $nth > 0){
$arr = array_slice($arr,$nth-1, 1, true);
}
return $arr;
}//end function getNthItemFromArr