php - 创建两个数组,一个以 0 为索引,另一个以 ID 为索引,并使用连接两者的引用

标签 php arrays reference

这里很难得到标题,但本质上我想做的是从我的数据库中获取一些数据,并将其中的一部分插入到两个数组中:

  1. 第一个数组是一个规则的有序数组,所以

    $list = [
      0 => ['id' => 'a', 'value' => 2],
      1 => ['id' => 'b', 'value' => 4],
      // etc  
    ];
    
  2. 第二个数组将使用对象的唯一标识作为数组的键,所以

    $map = [
      'a' => ['id' => 'a', 'value' => 2],
      'b' => ['id' => 'b', 'value' => 4],
      // etc  
    ];
    

但是,我希望通过引用链接 $list$map 的实际内容,这样如果我更改一个,另一个就会更新。

// update `a`'s value
$map['a']['value'] = 10;

// will echo "TRUE"
echo ($list[0]['value'] === 10 ? 'TRUE' : 'FALSE');

但是,我使用的代码无法正常工作,我知道原因,但不确定如何修复它。

这是我的脚本中发生的事情的一些伪代码:

<?php

// Sample data
$query_result = [
    ['id' => 'a', 'other_data' => '...'],
    ['id' => 'b', 'other_data' => '...'],
    ['id' => 'c', 'other_data' => '...'],
    // etc
];

$list = [];
$map = [];

foreach ($query_result as $obj) {
    // Problem is here, $temp_obj gets reassigned, rather than a new variable being created
    $temp_obj = ['foreign_key' => $obj['id'], 'some_other_data' => 'abc', ];

    // Try to have object that is inserted be linked across the two arrays
    $list[] = &$temp_obj;
    $map[$obj['id']] = &$temp_obj;
}

// Both will just contain my 3 copies of the last item from the query,
// in this case, `['id' => 'c', 'other_data' => '...'],`
var_dump($list);
var_dump($map);

这是正在发生的事情的一个非常简化的版本,但基本上是一样的。

因此,当我遍历我的对象并将它们添加到两个数组 $list$map 时,我如何添加这些对象以便它们成为链接对彼此?

最佳答案

只需像这样删除代码中的&:

$list[] = $temp_obj;  
$map[$obj['id']] = $temp_obj;

关于php - 创建两个数组,一个以 0 为索引,另一个以 ID 为索引,并使用连接两者的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37997729/

相关文章:

javascript - 客户端和服务器端编程有什么区别?

php - 创建具有所有 NULL 值的关联数组的最简洁方法是什么?

php - Magento:从一组中获取所有客户

c - char 数据类型中的撇号

javascript - 当改变复制变量的值时,它也在改变 angularjs 中的主变量值

java - 在 Java 中使用哪种类型的引用?

PHP 似乎无法识别 $this 变量

ruby - 有没有一种方法可以只删除 1 个匹配的数组元素?

javascript - 如何按对象属性对数组进行分组

rust - Rust 的确切自动解引用规则是什么?