【问题标题】:Using array_flip() to return an array使用 array_flip() 返回一个数组
【发布时间】:2015-08-20 13:22:22
【问题描述】:

我有一个数组:

$input = array(1,2,3,4,6,5,3,6)

我希望翻转键/值对。 这可以通过使用 array_flip() 函数来完成。 $flipped = array_flip($input)

如果原始数组中有 2 个或更多相同的值(在本例中为 6),我如何将它返回到数组中?

array= ([1]=0,[2]=>1,[4]=>2,[6]=>array(3,6),[5]=>4,[3]=>5)

我尝试使用 array_count_values() 但不知道该怎么做?

【问题讨论】:

  • 你的意思是你希望结果是一个数组,其中键是输入数组中的唯一项,每个键的值是它们出现的位置原始数组?

标签: php arrays


【解决方案1】:

您不能使用array_flip() 函数来做到这一点。可能您正在寻找类似的东西:

<?php
function array_flip_and_collect($input) {
  $output = [];
  foreach ($input as $key=>$val) {
    $output[$val][] = $key;
  }
  return $output;
}

$input = array(1,2,3,4,6,5,3,6);
print_r(array_flip_and_collect($input));

输出:

Array
(
    [1] => Array
        (
            [0] => 0
        )

    [2] => Array
        (
            [0] => 1
        )

    [3] => Array
        (
            [0] => 2
            [1] => 6
        )

    [4] => Array
        (
            [0] => 3
        )

    [6] => Array
        (
            [0] => 4
            [1] => 7
        )

    [5] => Array
        (
            [0] => 5
        )
)

请注意,输出与您在问题中建议的内容略有不同。这是故意的,因为这对我来说似乎更合乎逻辑。如果您真的希望只有一个元素的键确实是标量而不是具有一个元素的数组,那么您必须在代码中添加一个额外的转换步骤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-08
    • 2017-11-28
    • 2013-06-27
    • 2016-05-27
    • 2021-05-11
    相关资源
    最近更新 更多