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
但这只会产生一个空白条目。
7个解决方案
64 votes
使用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];
nickf answered 2020-02-17T17:08:14Z
16 votes
我有点困惑。 您的代码似乎没有正确的数组键。 但是,如果您只想获取数组中的第二个元素,则可以使用:
$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值,似乎您正在尝试设置会话值。 上面的代码可以做到这一点。 但是,它不是遍历内部数组,而是遍历外部数组并使用索引来跟踪它在内部数组中的位置。 这应该是合理的表现。
Perry Munger answered 2020-02-17T17:08:43Z
5 votes
您可以使用array_slice获得第二项:
$a= array(
'hello'=> 'world',
'how'=> 'are you',
'an'=> 'array',
);
$second= array_slice($a, 1, 1, true);
var_dump($second);
leepowers answered 2020-02-17T17:09:04Z
2 votes
这是使用array_slice和current的一种方法
$value = current(array_slice($array, 1, 1)); // returns value only
Sam Carlton answered 2020-02-17T17:09:24Z
0 votes
如果您在第一个示例中提供的数组与$ 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++;
}
Elise van Looij answered 2020-02-17T17:09:52Z
0 votes
这里的每个响应都专注于获取第二个元素,而与数组的形成方式无关。
如果是这种情况。
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
}
}
我不明白您要做什么,想解释一下吗?
metrobalderas answered 2020-02-17T17:10:30Z
0 votes
/**
* 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
Manchumahara answered 2020-02-17T17:10:48Z