【问题标题】:Combine 2 arrays into 2d array without losing data将 2 个数组组合成 2d 数组而不丢失数据
【发布时间】:2017-09-12 04:54:35
【问题描述】:

我有 2 个数组,想组合成第三个数组,其中一个数组作为键,另一个作为值。我尝试使用array_combine(),但该函数会消除所有重复的键,所以我希望结果数组为二维数组。示例数组如下:

$keys = {0,1,2,0,1,2,0,1,2};
$values = {a,b,c,d,e,f,g,h,i};
 $result = array(
    [0]=>array(0=>a,1=>b,2=>c),
    [1]=>array(0=>d,1=>e,2=>f),
    [2]=>array(0=>g,1=>h,2=>i)
 );
//What i am using right now is: 
$result = array_combine($keys,$values);

但它只返回数组(0=>g,2=>h,3=>i)。任何建议将不胜感激!

【问题讨论】:

  • 显然。因为数组必须有唯一的键/索引
  • 是的,我知道,所以我打算像上面那样转换成二维数组。但我不知道如何
  • 您的值与0,1,2,0,1,2 相同,当它们转换为键时,它们会被最新值覆盖
  • 我知道它们是如何被覆盖的,但我想问的是如何将每个键的 3 个键拆分为 2d 结果数组中的一个较小的数组。

标签: php arrays multidimensional-array


【解决方案1】:

你可以这样做:-

<?php

$keys = array(0,1,2,0,1,2,0,1,2);
$values = array('a','b','c','d','e','f','g','h','i');

$values = array_chunk($values,count(array_unique($keys)));

foreach($values as &$value){
   $value = array_combine(array_unique($keys),$value);
}

print_r($values);

https://eval.in/859753

【讨论】:

  • @Tedxxxx 很高兴为您提供帮助:):)
  • 很抱歉打扰您,但无论如何我可以通过 $keys 中的条件对数组 $values 进行分块。例如数组 $key 是 {0,1,2,4,5,2,6,7,4,2}。每当 $keys = 2 时,如何对数组 $values 进行分块?
  • @Tedxxxx 请提出一个新问题。你一定会得到答案。你也可以把这个问题链接分享给我。如果可能,我会检查并尝试给出答案。
【解决方案2】:

是的,上面的方法是有效的,我也为此投了赞成票,但我不知道为什么你不需要合并到 foreach 循环中。结果仅在第二行中给出。你能描述一下吗?

<?php
 $keys = array(0,1,2,0,1,2,0,1,2);
 $values = array('a','b','c','d','e','f','g','h','i');
 $v = array_chunk($values,count(array_unique($keys)));
 echo "<pre>";print_r($v);
?>

https://eval.in/859759

【讨论】:

  • 有没有我们可以按条件对数组进行分块,例如,当 key = 2 时分块?
  • 这是因为他想要$keys 作为数组键。如果$keys = array(2,3,5,2,3,5); 输出需要是:- Array ( [0] =&gt; Array ( [2] =&gt; a [3] =&gt; b [5] =&gt; c ) [1] =&gt; Array ( [2] =&gt; d [3] =&gt; e [5] =&gt; f ) [2] =&gt; Array ( [2] =&gt; g [3] =&gt; h [5] =&gt; i ) )
  • @AlivetoDie 不需要添加,但我认为不需要。为什么我们要多写几行代码?
  • @AnandPandey 检查我上面的评论。见这里:-eval.in/859765(我的)和eval.in/859766(你的)
  • @AlivetoDie:我不明白输出与我们相同的差异。
猜你喜欢
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 2015-11-28
  • 2018-09-30
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
相关资源
最近更新 更多