0

ループからいくつかのphp配列があり、それらはすべて同じ名前です。今、それらをマージしたいのですが、うまくいかないようです...

ここに私のループがあります:

while($row = mysql_fetch_row($sql1)){
    $startzeit=strtotime($row[2]);
    $endzeit=strtotime($row[3]);
    $startzeit_format = date("Y-m-d",$startzeit);
    $endzeit_format = date("Y-m-d",$endzeit);
    $datearray[] = createDateRangeArray($startzeit_format,$endzeit_format);
    }

これはマージ コードである必要があります。

for($i = 0; $i<count($datearray); $i++)
    {
    $datesarray = array_merge($datearray[$i]);
    }

とにかく、手動のマージはうまくいきます:

$datesarray = array_merge( $datearray[0], $datearray[1], $datearray[2], $datearray[3]); 

これにより、目的の出力が得られます。ただし、単一の配列はデータベースから取得され、mySQL に新しいエントリがあるたびに $datearray[4]、$datearray[5] などを追加しないため、自動化したい..

の結果print_r($datearray):

Array ( 
    [0] => Array ( [0] => 2014-03-08 ) 
    [1] => Array ( [0] => 2013-09-15 ) 
    [2] => Array ( [0] => 2013-09-21 ) 
    [3] => Array ( [0] => 2013-10-03 
                   [1] => 2013-10-04 
                   [2] => 2013-10-05 
                   [3] => 2013-10-06 )
      )  
4

2 に答える 2

1

あなたが探しているのは、配列を平坦化することです:

$datesarray = call_user_func_array('array_merge', $datearray);

これは、配列アイテムを手動でマージする方法と同じです。

以下も参照してください。call_user_func_array()

単純なループを使用して、ループ内でこれを行うこともできます。

$datesarray = array();

while ($row = mysql_fetch_row($sql1)) {
    // ...
    foreach (createDateRangeArray($startzeit_format,$endzeit_format) as $item) {
        $datesarray[] = $item;
    }
}
于 2013-09-11T01:52:51.680 に答える
0

単一の配列を何もマージしていません。

$newArray = array_merge($array, $array) 

これらの2つの配列をマージしますが、あなたはやっています

$array = array_merge($datearray[$i]);

実際には、配列の 1 つのキーから配列を作成しています。

于 2013-09-11T01:48:07.400 に答える