【问题标题】:Transforming three arrays to one with values/keys使用值/键将三个数组转换为一个
【发布时间】:2016-06-22 17:26:20
【问题描述】:

注意:下面的数组不是 3 个不同的数组。它们是 1 个变量的一部分:$mainArray;

样本数组 1(键):

[0] => Apartments
[1] => Apartments
[2] => Apartments
[3] => Houses
[4] => Houses
[5] => Houses
[6] => Suites
[7] => Suites
[8] => Exclusive
[9] => Exclusive
[10] => SuperB

样本数组 2(值):

[0] => Apartment Value1
[1] => Apartment Value2
[2] => Apartment Value3
[3] => Houses Value 1
[4] => Houses Value 2
[5] => Houses Value 3
[6] => Suites Value 1
[7] => Suites Value 2
[8] => Exclusive Value 1
[9] => Exclusive Value 2
[10] => SuperB Value 1

样本数组 3(值):

[0] => Apartment Value1
[1] => Apartment Value2
[2] => Apartment Value3
[3] => Houses Value 1
[4] => Houses Value 2
[5] => Houses Value 3
[6] => Suites Value 1
[7] => Suites Value 2
[8] => Exclusive Value 1
[9] => Exclusive Value 2
[10] => SuperB Value 1

我想要的结果是:

$array[$key] = array($array2,$array3);

样本结果:

[Apartments] => array(rows 0-3 from Array #2, 0-3 from Array #3);
[Houses] => array(rows 3-5 from Array #2, 3-5 from Array #3);
[Exclusive] => array(rows 6-7 from Array #2, 6-7 from Array #3);
[Suites] => array(rows 8-9 from Array #2, 8-9 from Array #3);
[SuperB] => array(row 10 from Array #2, 10 from Array #3);

因此成为带有键的维度数组。

对于这个问题,我们始终假设三个数组包含完全相同数量的行。不同的是,我想转换第一个数组(键),以将其他两个数组保存为维度数组。

【问题讨论】:

  • 您能告诉我们您希望最终数组的外观吗?也许这样更容易理解
  • 我已经用“示例结果”块更新了问题。

标签: php


【解决方案1】:

我想这就是你想要的。让我知道我是否可以在这方面为您提供更多帮助。

<?php
    $mainArray = [
        ["Apartments","Apartments","Apartments","Houses","Houses","Houses","Suites","Suites","Exclusive","Exclusive","SuperB"],
        ["Apartment Value1","Apartment Value2","Apartment Value3","Houses Value 1","Houses Value 2","Houses Value 3","Suites Value 1","Suites Value 2","Exclusive Value 1","Exclusive Value 2","SuperB Value 1"],
        ["Apartment Value1","Apartment Value2","Apartment Value3","Houses Value 1","Houses Value 2","Houses Value 3","Suites Value 1","Suites Value 2","Exclusive Value 1","Exclusive Value 2","SuperB Value 1"]
    ];

    if(count($mainArray[0]) != count($mainArray[1]) || count($mainArray[0]) != count($mainArray[2])) {
        throw new Exception("Arrays are not the same size");
    }

    $resultArray = [];
    $count = count($mainArray[0]);

    for($i = 0; $i < $count; $i++) {
        if(!isset($resultArray[$mainArray[0][$i]])) {
            $resultArray[$mainArray[0][$i]] = array($mainArray[1][$i], $mainArray[2][$i]);
        } else {
            $resultArray[$mainArray[0][$i]][] = $mainArray[1][$i];
            $resultArray[$mainArray[0][$i]][] = $mainArray[2][$i];
        }
    }

    echo "<pre>".print_r($resultArray, true)."</pre>";

【讨论】:

  • 是的.. 看起来像我需要的。唯一的问题是所有数组都在一个变量中。他们没有分开
  • 我已经更新了代码,它应该可以按预期工作:)
  • 看起来棒极了!但是,这些数组不是 3 个单独的数组。它们位于 $mainArray 中,其中包含 3 个数组。
  • 我已经再次更新代码对于第一个值数组,第二个值数组的键按该顺序排列。我还添加了一个简单的 if 语句,因此如果所有三个数组的大小不同,则代码将不会执行。
  • 好的,我认为更新的代码应该是最终的。 “合并”结果存储在 $resultArray
猜你喜欢
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
相关资源
最近更新 更多