【问题标题】:How to convert a simple array to an associative array?如何将简单数组转换为关联数组?
【发布时间】:2011-09-03 10:42:24
【问题描述】:

在 PHP 中将简单数组转换为关联数组以便在 isset($array[$value]) 中检查值的最快方法是什么?

即进行以下转换的最快方法:

$array = array(1, 2, 3, 4, 5);
$assoc = array();

foreach ($array as $i => $value) {
        $assoc[$value] = 1;
}

【问题讨论】:

  • 使用 in_array($value, $array) 代替 isset($array[$value])

标签: php arrays dictionary associative


【解决方案1】:

您的代码完全等同于:

$assoc = array_fill_keys(array(1, 2, 3, 4, 5), 1); // or
$assoc = array_fill_keys(range(1, 5), 1);

array_flip(),虽然它可能适用于您的目的,但不一样。

PHP 参考:array_fill_keys()array_flip()

【讨论】:

  • 如何将其应用于二维数组?谢谢!
  • 你是对的。正确的方法是array_fill_keys(),这应该是选择的答案。
【解决方案2】:

array_flip() 正是这样做的:

array_flip() 以翻转顺序返回 array,即 trans 中的键成为值,trans 中的值成为键。

请注意,trans 的值必须是有效的键,即它们必须是 integerstring。如果值的类型错误,则会发出警告,并且有问题的键/值对不会被翻转

如果一个值多次出现,最新的键将被用作它的值,所有其他的都将丢失。


但除此之外,PHP 中只有一种类型的数组。甚至数字(“简单”,你称之为)数组也是关联的。

【讨论】:

  • array_flip 会这样做...谢谢.. 但是 isset(array[5]) 未设置,但在关联数组 isset(assoc_array[5]) 上设置...因为值为关键......但在简单数组中,数组索引是关键......我错过了什么
  • @Rome:你在这里混合了两件事。每个数组都是关联的。当然$array[5] 没有设置,因为密钥从04。您想要一个键从@9​​87654329@ 到5 的数组(或者换句话说,您希望将 on 数组的值设置为另一个键)。但是,这两个数组都是关联的。 $array 的键是刚刚从0 和连续整数开始。
  • 注意:在我有限的测试中,array_fill_keys 比 array_flip 快一些
【解决方案3】:

如果有人仍然想知道如何做到这一点,可以使用array_combine 函数来解决这个问题。

$array = array(1, 2, 3, 4, 5);
$assoc = array_combine($array,$array);

【讨论】:

  • 这是最好的解决方案!非常感谢。
  • 如果两个键相同,这将不起作用!
【解决方案4】:

简单地使用这个逻辑

$var1 = json_encode($arr1, JSON_FORCE_OBJECT);
$var1 = json_decode($var1);

其中 $arr1 是必须转换为关联数组的数组。 这可以通过json_encode和json_decode来实现

【讨论】:

    【解决方案5】:
    function simple_to_associative($array) {
        $new_array = [];
        $i = 0;
        $last_elem = end($array);
        $nr_elems = count($array);
        foreach ($array as $index=>$value) {
            if($i % 2 == 0 && $last_elem == $value) {
                $new_array[$value] = '';
            } elseif($i % 2 == 0) {
                $new_array[$value] = $array[$index + 1];
            }
            $i++;
        }
        return $new_array;
    }
    

    适用于任何简单的无限元素数组。

    【讨论】:

      猜你喜欢
      • 2016-12-24
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 2017-09-02
      • 2017-12-11
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      相关资源
      最近更新 更多