【问题标题】:Convert large array of array to associative array without loop将大数组数组转换为无循环关联数组
【发布时间】:2020-03-02 02:31:54
【问题描述】:

我使用 aws redis 缓存来获得更快的结果,而不是保存在数据库中。 用这个方法

$result = $client->listTagsForResource([
    'ResourceName' => '<string>', // REQUIRED
]);

现在它以给定的格式给我结果。

Array
(
    [0] => Array
        (
            [Key] => key1
            [Value] => string1
        )

    [1] => Array
        (
            [Key] => status
            [Value] => 1
        )

)

我无法在亚马逊文档中找到可以给我直接结果的函数,所以我决定在 array 中搜索,但是在非常大的带有循环的数组中查找会花费我的时间。那么有没有办法在下面转换它

Array
(
    [key1] =>  string1,
    [status] =>  1
)

所以我可以使用$array['key1']直接访问数组索引

【问题讨论】:

  • 如果您只对结果集执行一次搜索,那么首先将其转换为关联数组不可能使其更快,因为您仍然需要支付遍历成本。也就是说,转换循环的成本永远不会低于一个搜索循环的成本。
  • 如果你想用这种方式搜索数据,为什么不先转换一下再写入缓存。这意味着转换完成一次,读取速度更快。
  • @AlexHowansky 是的,你是对的 array_combine 将花费相同或更多的时间,那么对于大型数组来说,最好的方法应该是什么。

标签: php arrays redis amazon-elasticache aws-php-sdk


【解决方案1】:

您可以尝试这样的方法来创建新数组:

$newArray = array_combine(
                array_column($array, 'Key'), 
                array_column($array, 'Value')
);

echo $newArray['status'];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-04
    • 2019-01-06
    • 2011-07-11
    • 1970-01-01
    • 2017-01-10
    • 2011-05-08
    • 2020-04-23
    相关资源
    最近更新 更多