Si vous avez un tableau associatif:
Array
(
[uid] => Marvelous
[status] => 1
[set_later] => Array
(
[0] => 1
[1] => 0
)
[op] => Submit
[submit] => Submit
)
Et vous voulez accéder au deuxième élément, comment le feriez-vous? $arr[1]
ne semble pas fonctionner:
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
}
}
Ce code est censé produire:
$_SESSION[SET_NOW_KEY]['status'] = 1
Mais cela produit simplement une entrée vide.
Utilisez 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];
Je suis un peu confus. Votre code ne semble pas avoir les clés correctes pour le tableau. Cependant, si vous souhaitez ne saisir que le deuxième élément d'un tableau, vous pouvez utiliser:
$keys = array_keys($inArray);
$key = $keys[1];
$value = $inArray[$key];
Cependant, après avoir envisagé ce que vous essayez de faire, cela pourrait mieux fonctionner:
$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 ++;
}
Est ce que ça aide? Il semble que vous tentiez de définir la valeur de la session si la valeur set_later n'est pas définie. Le code ci-dessus fait cela. Au lieu de parcourir le tableau interne, toutefois, il effectue une itération sur le tableau externe et utilise un index pour rechercher sa position dans le tableau interne. Cela devrait être raisonnablement performant.
Vous pouvez utiliser array_slice
pour obtenir le deuxième élément:
$a= array(
'hello'=> 'world',
'how'=> 'are you',
'an'=> 'array',
);
$second= array_slice($a, 1, 1, true);
var_dump($second);
Voici un moyen de le faire avec array_slice et current
$value = current(array_slice($array, 1, 1)); // returns value only
Chacune des réponses ici vise à obtenir le deuxième élément, indépendamment de la façon dont le tableau est formé.
Si c'est votre cas.
Array
(
[uid] => Marvelous
[status] => 1
[set_later] => Array
(
[0] => 1
[1] => 0
)
[op] => Submit
[submit] => Submit
)
Ensuite, vous pouvez obtenir la valeur du deuxième élément via $array['status']
.
Aussi ce code
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
}
}
Je ne comprends pas ce que tu essaies de faire, tu veux expliquer?
Si le tableau que vous fournissez dans le premier exemple correspond à $ form_state, alors
$form_state['values']['set_later'][1]
marchera.
Autrement
$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