【问题标题】:Merging two arrays then sorting them合并两个数组然后对它们进行排序
【发布时间】:2023-03-18 14:34:01
【问题描述】:

这里是初学者。我有两个数组,一个包含我的值($m1),另一个包含我想用作键的内容($pn)(非唯一字符串)。它们具有相同的长度 (465),并且 $pn[0] 是 $m1[0] 值的键。我使用这样的 foreach 循环将它们合并为键值对:

$result = array ();
foreach($pn as $key => $value){
    $result[] = array($value => $m1[$key]);
}

如果我这样做并在 $result 上尝试 print_r,我确实会看到分配的键和值。现在我需要获取 93 个最大值及其对应的键。我尝试使用 asort 但它没有按值对数组进行排序,它只是以某种方式把它搞砸了。如果有人有答案,我将不胜感激。非常感谢!

【问题讨论】:

  • array_combine() 是你想要的函数
  • 我有非唯一的字符串作为键。 array_combine 不能这样做,它以某种方式将值与相同的键合并。或者当我尝试使用它时发生了类似的事情。 foreach 循环似乎工作得很好,但我无法对它产生的数组进行排序。
  • 如果它们是非唯一键,那么你想发生什么?
  • 使用 array_combine() 后,您应该能够对新数组执行排序。
  • 我想对数组进行排序,得到93个最大值及其对应的键。

标签: php sorting merge associative-array


【解决方案1】:

使用array_combine() 创建您的组合数组

$result = array_combine(
    $pn,
    $m1
);

然后asort(),记住参数是通过引用传递的

asort($result);

编辑

如果您有非唯一键,则使用循环构建组合数组:

$result = array();
foreach($pn as $key => $value){
    $result[] = array('key' => $m1[$key], 'value' => $value);
}

然后使用usort()对数组进行排序:

usort(
    $result,
    function ($a, $b) {
        if ($a['value'] == $b['value']) {
            return 0;
        }
        return ($a['value'] > $b['value']) ? -1 : 1;
    }
);

并使用array_slice()提取前93个条目

【讨论】:

  • 我不能使用数组合并,因为我的 $pn 数组中有相同的键。其他人的这个问题供参考:stackoverflow.com/questions/9078770/…
  • 我想我成功了,非常感谢。我可以问一个非常初学者的问题吗?我的原始循环创建了一个关联数组。为什么 asort 没有解决这个问题?
  • 你原来的循环创建了一个嵌套数组;枚举数组中的单个关联数组.... asort() 在顶级(枚举)数组上工作....我的解决方案并没有什么不同,但使用 usort 强制对来自单个数组元素的值进行排序
猜你喜欢
  • 2016-09-23
  • 2018-06-15
  • 2022-10-04
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多