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

2022-08-30 10:03:27

如果您有关联数组:

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

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


答案 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];

答案 2

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

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


推荐