我正在尝试做一些事情,但我找不到任何解决方案,我也遇到了一些麻烦,所以这里有一个示例代码,也许它足以证明我的目标是什么为:
$input = array
(
'who' => 'me',
'what' => 'car',
'more' => 'car',
'when' => 'today',
);
现在,我想使用array_splice()
从数组中删除(并返回)一个元素:
$spliced = key(array_splice($input, 2, 1)); // I'm only interested in the key...
以上将从$input
(第一个参数)中移除并返回1个元素(第三个参数),偏移量为2(第二个参数),因此$spliced
将保存值 {{1 }}
我将使用foreach循环迭代more
,我知道要拼接的关键但问题是我不知道它的数字偏移以及{{1只接受我不知道该怎么做的整数。
一个非常沉闷的例子:
$input
我首先使用array_search()
,但它没有意义,因为它会返回关联索引....
如何确定关联索引的数字偏移?
答案 0 :(得分:4)
抓住并unset
这个值是一个更好的方法(也可能更快),但无论如何,你可以算上
$result = array();
$idx = 0; // init offset
foreach ($input as $key => $value)
{
if ($key == 'more')
{
// Remove the index "more" from $input and add it to $result.
$result[] = key(array_splice($input, $idx, 1));
}
$idx++; // count offset
}
print_R($result);
print_R($input);
给出
Array
(
[0] => more
)
Array
(
[who] => me
[what] => car
[when] => today
)
但是从技术上讲,关联键没有数字索引。如果输入数组是
$input = array
(
'who' => 'me',
'what' => 'car',
'more' => 'car',
'when' => 'today',
'foo', 'bar', 'baz'
);
然后索引2是“baz”。但由于array_slice
接受 offset ,它与数字键不同,它使用在数组中该位置找到的元素(按元素显示的顺序),这就是为什么沿着工作计数。
在旁注中,使用数组中的数字键,您会得到有趣的结果,因为您正在测试相等而不是身份。改为$key === 'more'
,以防止'更多'进行类型转换。由于关联键是唯一的,你也可以在找到'more'后返回,因为检查后续键是没有意义的。但是真的:
if(array_key_exists('more', $input)) unset($input['more']);
答案 1 :(得分:3)
我找到了解决方案:
$offset = array_search('more', array_keys($input)); // 2
即使使用“搞笑”数组,例如:
$input = array
(
'who' => 'me',
'what' => 'car',
'more' => 'car',
'when' => 'today',
'foo', 'bar', 'baz'
);
此:
echo '<pre>';
print_r(array_keys($input));
echo '</pre>';
正确输出:
Array
(
[0] => who
[1] => what
[2] => more
[3] => when
[4] => 0
[5] => 1
[6] => 2
)
这是一个微不足道的解决方案,但到达那里有点模糊。
我感谢所有人的帮助。 =)
答案 2 :(得分:1)
$i = 0;
foreach ($input as $key => $value)
{
if ($key == 'more')
{
// Remove the index "more" from $input and add it to $result.
$result[] = key(array_splice($input, $i , 1));
}
$i++;
}