创建两个数组,一个0索引,另一个ID索引,引用连接两个

时间:2016-06-23 17:02:57

标签: php arrays reference

标题很难到达,但基本上我要做的是从我的数据库中检索一些数据,并将其中的部分插入到两个数组中:

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

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

    $map = [
      'a' => ['id' => 'a', 'value' => 2],
      'b' => ['id' => 'b', 'value' => 4],
      // etc  
    ];
    
  3. 但是,我希望$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时,如何添加这些对象以使它们成为彼此的链接?

1 个答案:

答案 0 :(得分:0)

只需删除代码中的&,如下所示:

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