【问题标题】:Merge multiple Array() depending loop and number [duplicate]合并多个 Array() 取决于循环和数字
【发布时间】:2013-04-28 23:31:16
【问题描述】:

我想合并 3 个数组。

我的第一个是:

Array ( [0] => Leaves-19 [1] => Shifts-1 [2] => Shifts-1 [3] => Shifts-1 [4] => Shifts-1 [5] => Shifts-1 [6] => Leaves-19 [7] => Leaves-19 [8] => Shifts-1 [9] => Shifts-1 [10] => Shifts-1 [11] => Shifts-1 [12] => Shifts-1 [13] => Leaves-19 [14] => Leaves-19 [15] => Shifts-1 [16] => Shifts-1 [17] => Shifts-1 [18] => Shifts-1 [19] => Shifts-1 [20] => Leaves-19 [21] => Leaves-19 [22] => Shifts-1 [23] => Shifts-1 [24] => Shifts-1 [25] => Shifts-1 [26] => Shifts-1 [27] => Leaves-19 [28] => Leaves-19 [29] => Shifts-1 [30] => Shifts-1 [31] => Shifts-1 [32] => Shifts-1 [33] => Shifts-1 [34] => Leaves-19 [35] => Leaves-19 [36] => Shifts-1 [37] => Shifts-1 [38] => Shifts-1 [39] => Shifts-1 [40] => Shifts-1 [41] => Leaves-19 )

我的第二个是:

Array ( [0] => 2013-04-28 [1] => 2013-04-29 [2] => 2013-04-30 [3] => 2013-05-01 [4] => 2013-05-02 [5] => 2013-05-03 [6] => 2013-05-04 )

第三个是:

Array ( [0] => 13 [1] => 10 [2] => 12 [3] => 9 [4] => 14 [5] => 11 )

我想要:

  • 2013-04-28 / 13 / Leaves-19
  • 2013-04-29 / 13 / Shifts-1
  • 2013-04-30 / 13 / Shifts-1
  • 2013-05-01 / 13 / Shifts-1
  • 2013-05-02 / 13 / Shifts-1
  • 2013-05-03 / 13 / Shifts-1
  • 2013-05-04 / 13 / Leaves-19
  • 2013-04-28 / 10 / Leaves-19
  • 2013-04-29 / 10 / Shifts-1
  • 2013-04-30 / 10 / 班次-1
  • 2013-05-01 / 10 / Shifts-1
  • 2013-05-02 / 10 / Shifts-1
  • 2013-05-03 / 10 / Shifts-1
  • 2013-05-04 / 10 / Leaves-19
  • ...

感谢帮助。


我尝试了什么:

echo print_r($_POST['dayType'])."<hr />";
echo print_r($_POST['dayArr'])."<hr />";
echo print_r($_POST['userArr'])."<hr />";

//echo count($_POST['dayType'])." --- ".count($_POST['dayArr'])." --- ".count($_POST['userArr']);

// 2013-05-04 / 13 / Leaves-19
$loopNb1 = count($_POST['dayType']);
$loopNb2 = count($_POST['dayType'])/7;

for($a=0; $a<$loopNb1; $a++) {
    echo $_POST['dayType'][$a]."<br />";
}

echo "<hr />";

for($b=0; $b<$loopNb2; $b++) {
    echo $_POST['userArr'][1]."<br />";
}

【问题讨论】:

  • 很高兴发布您尝试过的内容。
  • 你的第三个数组只有 6 个元素,而不是 7 个。
  • 谢谢。我举个例子。认为现在更好理解。
  • 您可能正在寻找php.net/array_map,请参见示例#4 创建数组数组
  • 感谢链接,但每个示例都显示了相同的数组。地雷不是平等的。

标签: php arrays


【解决方案1】:

第一个/第二个/第三个数组与您粘贴的相同(相同顺序)。

$datesCount        = count( $secondArray );
$firstArrayLength  = count( $firstArray );
$thirdArrayLength  = count( $thirdArray );

for( $i=0 ; $i < $thirdArrayLength ; $i++ )
{
    $currentThirdArrayValue = $thirdArray[$i];

    for( $inner=0, $firstArrayIndex=0 ; $inner < $datesCount ; $inner++, $firstArrayIndex++ )
    {
        if( $firstArrayIndex == $firstArrayLength )
                $firstArrayIndex = 0;

        echo "{$secondArray[$inner]} / {$currentThirdArrayValue} / {$firstArray[$firstArrayIndex]}<br/>\n";
    }
}

会给你:

2013-04-28 / 13 / Leaves-19<br/>
2013-04-29 / 13 / Shifts-1<br/>
2013-04-30 / 13 / Shifts-1<br/>
2013-05-01 / 13 / Shifts-1<br/>
2013-05-02 / 13 / Shifts-1<br/>
2013-05-03 / 13 / Shifts-1<br/>
2013-05-04 / 13 / Leaves-19<br/>
2013-04-28 / 10 / Leaves-19<br/>
2013-04-29 / 10 / Shifts-1<br/>
2013-04-30 / 10 / Shifts-1<br/>
2013-05-01 / 10 / Shifts-1<br/>
2013-05-02 / 10 / Shifts-1<br/>
2013-05-03 / 10 / Shifts-1<br/>
2013-05-04 / 10 / Leaves-19<br/>

等等...以:

结尾
2013-05-01 / 11 / Shifts-1<br/>
2013-05-02 / 11 / Shifts-1<br/>
2013-05-03 / 11 / Shifts-1<br/>
2013-05-04 / 11 / Leaves-19<br/>

【讨论】:

  • 我真的需要像我的例子一样。 :(
  • 嗯,我明白你的意思了,修复应该是循环遍历日期数组,然后检查其他两个是否会超过最后一项并重置数组。 -- 要我修改吗?
  • 非常感谢。谢谢。
  • 当然,简单说明一下,在您的第一个“...”是 2013-05-04 / 13 / Leaves-19 之前,您期望的下一个值是什么?
  • 是的,我只是把 ... 分开。 :) 谢谢。
【解决方案2】:

得到一个想法-

//Your array
$a = array(1, 2, 3, 4, 5, 6,7,8);
$b = array("one", "two", "three", "four", "five",'123', 'asdfsadf');
$c = array("uno", "dos", "tres", "cuatro", "cinco", 'jina');


function myFunc($first, $second, $third) {
    if (!empty($first) && !empty($second) && !empty($second)) {
        return $first . '/' . $second . '/'. $third;
    }
}

// get the lowest size of array
$minimumSize = min(count($a), count($b), count($c));

//modify array in terms of lowest size
$firstArray = array_slice($a, 0, $minimumSize);
$secondArray = array_slice($b, 0, $minimumSize);
$thirdArray = array_slice($c, 0, $minimumSize);

$d = array_map('myFunc', $firstArray, $secondArray, $thirdArray);

【讨论】:

  • 感谢您的帮助,但我的数组不相等。
【解决方案3】:

如果您想要这 3 个数组中的所有组合(称它们为 $first、$second、$third), 你可以这样做:

foreach($first as $a){
 foreach($second as $b){
   foreach($third as $c{
     //do whatever you want with $a,$b,$c
     echo "$a/$b/$c";
   }
 }  
} 

【讨论】:

  • 谢谢,但我需要保持信息之间的关系。如果用户之间的数据不相同,Elvena 代码就像一个魅力,但不适用于第一个数组,你明白吗?你能帮忙吗?谢谢。
  • 这些数据是否来自数据库? in数据库而不是PHP解决问题不是更好吗?
  • 这是为了保存这种表格send-picture.com/upload/…
  • 我真的不明白第一个数组之间的联系(它的索引来自 [0] => Leaves-19 [1] => Shifts-1 ... [40] => Shifts -1 [41] => Leaves-19) 例如,索引 40 和 41 是什么意思?
  • 好的。用户需要制作的第一个数组数组(例如 Shifts-41 是从上午 9 点到下午 5 点)。第二个数组是要知道当前视图/表中的日期。第三个是给用户的。我知道一周有7天。我的第一个数组有 42 个数据。 42/7=6。我有 6 个用户。我想要每个日期,每个用户,他需要做的每种类型的日子。有了它的解决方案 Elvena 非常接近,但如果用户的日期类型不同,则会出现问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多