PHP:获取关联数组的第n项

如果你有一个关联数组:

Array ( [uid] => Marvelous [status] => 1 [set_later] => Array ( [0] => 1 [1] => 0 ) [op] => Submit [submit] => Submit ) 

你想访问第二个项目,你会怎么做? $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); // array("status" => 1) // or list($value) = array_slice($array, 1, 1); // 1 // or $blah = array_slice($array, 1, 1, true); // 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值没有设置。 上面的代码是这样做的。 但是,它不是迭代内部数组,而是遍历外部数组,并使用索引来追踪它在内部数组中的位置。 这应该是合理的performance。

您可以使用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 } } 

我不明白你想做什么,谨慎解释?

下面是一个使用array_slice和current的方法

 $value = current(array_slice($array, 1, 1)); // returns value only