55

如果你有一个关联数组:

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

但它只会产生一个空白条目。

4

7 回答 7

73

采用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];
于 2010-01-04T05:43:07.810 回答
17

我有点困惑。您的代码似乎没有正确的数组键。但是,如果您只想获取数组中的第二个元素,您可以使用:

$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 值,您似乎正在尝试设置会话值。上面的代码就是这样做的。然而,它不是遍历内部数组,而是遍历外部数组并使用索引来跟踪它在内部数组中的位置。这应该是合理的性能。

于 2010-01-04T16:03:52.123 回答
5

您可以使用array_slice获取第二项:

$a= array(
 'hello'=> 'world',
 'how'=> 'are you',
 'an'=> 'array',
);

$second= array_slice($a, 1, 1, true);
var_dump($second);
于 2010-01-04T05:41:52.883 回答
3

这是使用array_slicecurrent的一种方法

$value = current(array_slice($array, 1, 1)); // returns value only
于 2017-09-29T22:31:09.657 回答
0

如果您在第一个示例中提供的数组对应于 $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++;
}
于 2010-01-04T10:50:43.360 回答
0

这里的每个响应都集中在获取第二个元素上,而与数组的形成方式无关。

如果这是你的情况。

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
    }
}

我不明白你想做什么,介意解释一下吗?

于 2010-01-04T16:18:42.077 回答
0
/**
         * 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
于 2019-01-22T08:55:51.400 回答