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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值