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

标签 php arrays

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

$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/

相关文章:

c - 以下 C 代码中的 "item=infix_exp[i++]; "是什么意思?

php - 链接 MySQL 命令与。原始查询

带有 money_format 的 PHP 语言环境不适用于 fr_CA

javascript - 使用 Braintree 下拉 UI 选择定期计费的付款方式——或 : finding the payment method of a paymentMethodNonce

php - 如何在 foreach 循环中创建 HTML 表格

javascript - (AngularJS) 如何遍历数组

javascript - 数组/对象作为索引

php - MySQL比较忽略非字母数字字符的字符串

java - 线程中的异常 "main"java.lang.ArrayIndexOutOfBoundsException :2

arrays - 按低于特定数字的值过滤数组