Если у Вас есть ассоциативный массив:
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];
Я немного запутался. Похоже, что в вашем коде нет правильных ключей для массива. Однако, если вы хотите взять только второй элемент массива, вы можете использовать:
$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
, чтобы получить второй пункт:
$a= array(
'hello'=> 'world',
'how'=> 'are you',
'an'=> 'array',
);
$second= array_slice($a, 1, 1, true);
var_dump($second);
Если предоставленный в первом примере массив соответствует $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++;
}
Здесь каждый из ответов сфокусирован на получении второго элемента, независимо от того, как массив формируется.
Если это ваш случай.
Array
(
[uid] => Marvelous
[status] => 1
[set_later] => Array
(
[0] => 1
[1] => 0
)
[op] => Submit
[submit] => Submit
)
Тогда вы можете получить значение второго элемента через $array['status']
.
Также этот код
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
}
}
Я не понимаю, что вы пытаетесь сделать, хотите объяснить?
.