gpt4 book ai didi

php - 硬 PHP 螺母 : how to insert items into one associate array?

转载 作者:可可西里 更新时间:2023-11-01 00:51:40 31 4
gpt4 key购买 nike

是的,这是一个有点棘手的问题; 一个数组(没有副本),而不是任何奇数数组。让我解释一下,让我们从这里开始;

$a = array ( 'one' => 1, 'two' => 2, 'three' => 3, 'four' => 4, 'five' => 5, 'six' => 6 ) ;

假设这个数组很长,一百多条。我一步一步地遍历它,但在某个时候(让我们假设这发生在第二项)发生了一些事情。也许数据很时髦。尽管如此,我们还是需要向其中添加一些项目以供以后处理,然后不断循环遍历它,而不会丢失当前位置。基本上,我想做这样的事情;

echo current ( $a ) ;  // 'two'
array_insert ( $a, 'four', 'new_item', 100 ) ;
echo current ( $a ) ; // 'two'

array_insert 的定义是 ( $array, $key_where_insert_happens, $new_key, $new_value ) ;当然 $new_key 和 $new_value 应该包装在数组包装器中,但这不是重点。以下是我希望在上述代码运行后看到的情况;

print_r ( $a ) ; // array ( 'one' => 1, 'two' => 2, 'three' => 3, 'four' => 4, 'new_item' => 100, 'five' => 5, 'six' => 6 ) ;
echo current ( $a ) ; // 'two'

无论何时使用 array_splice、array_slice、array_push 或大多数其他数组摆弄函数,基本上都是创建数组的副本,然后可以将其复制回来,但这会破坏对原始数组和位置的引用好吧,我上面的循环中断了。我可以使用直接引用(即 $a['new_item'] = 'whatever;)或将其放在末尾,但这些都不会将项目插入给定位置。

有人要吗?我怎样才能直接插入关联数组(正在其他地方处理)?到目前为止,我唯一的解决方案是;

  1. 记录位置(current())
  2. 进行拼接/插入(array_slice)
  3. 用新数组覆盖旧数组($old = $new)
  4. 搜索新位置(首先 reset() 然后循环找到它 [!!!!!!])

肯定有更好、更简单、更优雅的方法来处理目前笨拙、繁重且步履蹒跚的事情吗?为什么没有 array_set_position ( $key ) 函数可以快速帮助解决这个问题,或者没有直接在同一个数组(或两者)上工作的 array_insert?

最佳答案

也许我没有正确理解你,但你调查过array_splice()了吗? ?

answer您可能也会感兴趣。


这样的东西行得通吗?

function array_insert($input, $key, $value)
{
if (($key = array_search($key, array_keys($input))) !== false)
{
return array_splice($input, $key, 1, $value);
}

return $input;
}


这是我能想到的最好的:

$a = array
(
'one' => 1,
'two' => 2,
'three' => 3,
'four' => 4,
'five' => 5,
'six' => 6,
);

ph()->Dump(next($a)); // 2
array_insert($a, 'four', array('new_item' => 100));
ph()->Dump(current($a)); // 2

function array_insert(&$array, $key, $data)
{
$k = key($array);

if (array_key_exists($key, $array) === true)
{
$key = array_search($key, array_keys($array)) + 1;
$array = array_slice($array, null, $key, true) + $data + array_slice($array, $key, null, true);

while ($k != key($array))
{
next($array);
}
}
}

ph()->Dump($a);

/*
Array
(
[one] => 1
[two] => 2
[three] => 3
[four] => 4
[new_item] => 100
[five] => 5
[six] => 6
)
*/

我认为不可能设置数组内部指针 without looping .

关于php - 硬 PHP 螺母 : how to insert items into one associate array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5931757/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com