2017-08-01 83 views
0

我有陣列的所有包含數據的相同格式的任意數量。有2個獨立的for循環循環遍歷兩個單獨的SQL查詢結果,並將它們添加到2個單獨的數組中。重新組織陣列,移動索引,以特定位置PHP的

一旦我有兩個陣列中的所有信息,我走過他們,並加入他們在一起,使一個較長的陣列。

然而,當我寫這個數組到CSV文件,該信息需要以數組中,因此爲了將其寫入到CSV文件。我怎樣才能做到這一點?

陣列1

[1] => Array 
     (
      [0] => 2017-07-21 00:00:00 
      [1] => Foo 
      [2] => Bar 
      [3] => 32.63 
      [4] => 18.36 
      [5] => 98.46 
     ) 

    [2] => Array 
     (
      [0] => 2017-07-21 00:00:00 
      [1] => Foo 
      [2] => Bar 
      [3] => 29.74 
      [4] => 148.68 
      [5] => 178.42 
     ) 

    //etc 

陣列2

[1] => Array 
     (
      [0] => RTGH707321222 
      [1] => THIS 
      [2] => IS 
      [3] => TEXT 
     ) 

    [2] => Array 
     (
      [0] => RTGH707321220 
      [1] => SOME 
      [2] => WORDS 
      [3] => HERE 
     ) 

    //etc 

加入陣列一起

array_walk($array2, function($values, $key) use (&$array1) { 

     $array1[$key] = array_merge($array1[$key], $values); 
    }); 

數組合並之後 - 的print_r($數組1)

[1] => Array 
     (
      [0] => 2017-07-21 00:00:00 
      [1] => Foo 
      [2] => Bar 
      [3] => 32.63 
      [4] => 18.36 
      [5] => 98.46 
      [6] => RTGH707321222 
      [7] => THIS 
      [8] => IS 
      [9] => TEXT 
     ) 

    [2] => Array 
     (
      [0] => 2017-07-21 00:00:00 
      [1] => Foo 
      [2] => Bar 
      [3] => 29.74 
      [4] => 148.68 
      [5] => 178.42 
      [6] => RTGH707321220 
      [7] => SOME 
      [8] => WORDS 
      [9] => HERE 
     ) 

    //etc 

因此,這是工作的罰款。但是,我想將這些索引中的一些移到一個不同的順序。我查看了array_splice(),但我不確定這是否是使用正確的方法。

我想要什麼它看起來像

[1] => Array 
      (
       [0] => 2017-07-21 00:00:00 
       [1] => RTGH707321222 
       [2] => TEXT 
       [3] => THIS 
       [4] => 18.36 
       [5] => 98.46 
       [6] => Foo 
       [7] => 32.63 
       [8] => IS 
       [9] => Bar 
      ) 

     //etc 

正如你可以看到,所有的信息仍然是相同的。這些值剛剛被移至不同的索引。我如何排列數組,使其看起來像上面那樣。任何人都可以將我指向正確的方向嗎?謝謝。

+0

什麼是你申請更改索引邏輯 – Thamilan

+0

我並沒有改變任何事情。這就是爲什麼我需要幫助 –

回答

1

這是使用array_replace()和排序陣列的簡單的方法。

沒有額外的循環,沒有臨時交換變量。

代碼:(Demo

$array1=[ 
    1=>['2017-07-21 00:00:00','Foo','Bar',32.63,18.36,98.46], 
    2=>['2017-07-21 00:00:00','Foo','Bar',29.74,148.68,178.42] 
]; 
$array2=[ 
    1=>['RTGH707321222','THIS','IS','TEXT'], 
    2=>['RTGH707321220','SOME','WORDS','HERE'] 
]; 
$order=[0=>'',6=>'',9=>'',7=>'',4=>'',5=>'',1=>'',3=>'',8=>'',2=>'']; 
array_walk($array2, function($values, $key) use (&$array1,$order) { 
    $array1[$key] = array_replace($order,array_merge($array1[$key], $values)); 
}); 
var_export($array1); 
+0

它說意想不到的[在行170 $訂單= [0 =>'',6 =>'',9 =>'',7 =>'',4 =>'',5 => '',1 => '',3 => '',8 => '',2 => '']; –

+0

@IbrahimHafiji您是否在使用PHP> = 5.4?如果不只是與'$順序=陣列(0替換=> '',6 => '',9 => '',7 => '',4 => '',5 => '',1 => '',3 =>'',8 =>'',2 =>'');' – mickmackusa

+0

是的,我剛剛意識到哈哈。謝謝 –

1

在這裏我們可以像使用交換technice,

<?php 
    foreach ($arr as $key => $value) { 
     $swap = $value[1]; 
     $arr[$key][1] = $value[6]; 
     $arr[$key][6] = $swap; 
     $swap = $value[9]; 
     $arr[$key][9] = $value[2]; 
     $arr[$key][2] = $swap; 
     $swap = $value[7]; 
     $arr[$key][7] = $value[3]; 
     $arr[$key][3] = $swap; 
    } 
    print_r($arr); 
?> 

$arr是你的陣列。