php 數組處理

來源:互聯網
上載者:User
$a:
array (size=16)
0 => string '1' (length=1)
1 => string '3' (length=1)
2 => string '5' (length=1)
3 => string '7' (length=1)
4 => string '10' (length=2)
5 => string '12' (length=2)
6 => string '14' (length=2)
7 => string '16' (length=2)
8 => string '17' (length=2)
9 => string '19' (length=2)
10 => string '21' (length=2)
11 => string '23' (length=2)
12 => string '26' (length=2)
13 => string '28' (length=2)
14 => string '30' (length=2)
15 => string '32' (length=2)

$b:
array (size=16)
0 => string '2' (length=1)
1 => string '4' (length=1)
2 => string '6' (length=1)
3 => string '8' (length=1)
4 => string '9' (length=1)
5 => string '11' (length=2)
6 => string '13' (length=2)
7 => string '15' (length=2)
8 => string '18' (length=2)
9 => string '20' (length=2)
10 => string '22' (length=2)
11 => string '24' (length=2)
12 => string '25' (length=2)
13 => string '27' (length=2)
14 => string '29' (length=2)
15 => string '31' (length=2)

如上數組。我要得到 [16, 1, 13, 4] [14, 3, 15, 2] [12, 5, 9, 8] [10,7, 9 , 8]
[32,17,29,20] [30,19,31,18] [28,21,25,24] [26,23,27,22]


回複討論(解決方案)

看不出有什麼組裝規律

/*規律$a = array(1,3,5,7,  10,12,14,16,  17,19,21,23,  26,28,30,32); a1           a2                    a3        a4$b = array(2,4,6,8,  9,11,13,15,  18,20,22,24,  25,27,29,31); b1           b2                   b3                   b4[16, 1,13, 4][14, 3,15, 2][12, 5, 9, 8][10, 7, 9 ,8]a2 + a1 = b2 + b1 = 17[32,17,29,20][30,19,31,18][28,21,25,24][26,23,27,22]a4 + a3 = b4 + b3 = 49*/t(17);t(49);function t($n){$a = array(1,3,5,7,  10,12,14,16,  17,19,21,23,  26,28,30,32);$b = array(2,4,6,8,  9,11,13,15,  18,20,22,24,  25,27,29,31);$a = array_chunk($a,4);$b = array_chunk($b,4);//15+16 = 31if($n <= 31){$useA = array_slice($a,0,2);$useB = array_slice($b,0,2);}else{$useA = array_slice($a,2,4);$useB = array_slice($b,2,4);}$data = array();arsort($useA[1]);foreach($useA[1] as $v1){foreach($useA[0] as $v2){if($n==$v1+$v2){$tmp = array();$tmp[] = $v1;$tmp[] = $v2;$data['a'][] = $tmp;}}}arsort($useB[1]);foreach($useB[1] as $v1){foreach($useB[0] as $v2){if($n==$v1+$v2){$tmp = array();$tmp[] = $v1;$tmp[] = $v2;$data['b'][] = $tmp;}}}foreach($data['a'] as $k=>$v){echo join(' , ',array_merge($v,$data['b'][$k])).'
';}}/*16 , 1 , 15 , 214 , 3 , 13 , 412 , 5 , 11 , 610 , 7 , 9 , 832 , 17 , 31 , 1830 , 19 , 29 , 2028 , 21 , 27 , 2226 , 23 , 25 , 24*/

是嗎?
[ 12, 5, 9, 8 ]
[ 10, 7, 9, 8 ]
怎麼解釋?

[ 10, 7, 9, 8 ] 應該是[10,7, 11 , 6]
最後結果是兩個數組的組合
a7 a0 b6 b1
a6 a1 b7 b0
a5 a2 b4 b3
a4 a3 b5 b2
a15 a8 b14 b9
a14 a9 b15 b8
a13 a10 b12 b11
a12 a11 b13 b10

[ 12, 5, 9, 8 ]
[ 10, 7, 9, 8 ]
感覺是他寫錯了,不然就沒規律了

好吧,就算他寫錯了
那麼
他要 [ 30, 19, 31, 18 ] 一組
你給 [ 30, 19, 29, 20 ] 一組
也是他寫錯了?

[ 12, 5, 9, 8 ]
[ 10, 7, 9, 8 ]
感覺是他寫錯了,不然就沒規律了

嗯,感覺這樣就不是規律了,有局限性

t(17);t(49);function t($n){$a = array(1,3,5,7,  10,12,14,16,  17,19,21,23,  26,28,30,32);$b = array(2,4,6,8,  9,11,13,15,  18,20,22,24,  25,27,29,31);$a = array_chunk($a,4);$b = array_chunk($b,4);//15+16 = 31if($n <= 31){$useA = array_slice($a,0,2);$useB = array_slice($b,0,2);}else{$useA = array_slice($a,2,4);$useB = array_slice($b,2,4);}$data = array();arsort($useA[1]);foreach($useA[1] as $v1){foreach($useA[0] as $v2){if($n==$v1+$v2){$tmp = array();$tmp[] = $v1;$tmp[] = $v2;$data['a'][] = $tmp;}}}$tmp = array_slice($useB[1],0,2);$useB[1] = array_merge(array_slice($useB[1],2,4),$tmp);foreach($useB[1] as $v1){foreach($useB[0] as $v2){if($n==$v1+$v2){$tmp = array();$tmp[] = $v1;$tmp[] = $v2;$data['b'][] = $tmp;}}}foreach($data['a'] as $k=>$v){echo join(' , ',array_merge($v,$data['b'][$k])).'
';}}/*16 , 1 , 13 , 414 , 3 , 15 , 212 , 5 , 9 , 810 , 7 , 11 , 632 , 17 , 29 , 2030 , 19 , 31 , 1828 , 21 , 25 , 2426 , 23 , 27 , 22*/

我想應該這樣做

$a = array(   1,  3,  5,  7,  10, 12, 14, 16,  17, 19, 21, 23,  26, 28, 30, 32);$b = array(   2,  4,  6,  8,   9, 11, 13, 15,  18, 20, 22, 24,  25, 27, 29, 31);function foo($a) {  $r = array();  foreach(array_chunk($a, 8) as $v) {    $t = array_chunk($v, 4);    $t = array_map(null, array_reverse($t[1]), $t[0]);    $r = array_merge($r, $t);  }  return $r;}$r = foo($a);foreach(foo($b) as $k=>$v) {  $k += $k % 2 ? -1 : 1;  $r[$k] = array_merge($r[$k], $v);}print_r($r);
Array(    [0] => Array        (            [0] => 16            [1] => 1            [2] => 13            [3] => 4        )    [1] => Array        (            [0] => 14            [1] => 3            [2] => 15            [3] => 2        )    [2] => Array        (            [0] => 12            [1] => 5            [2] => 9            [3] => 8        )    [3] => Array        (            [0] => 10            [1] => 7            [2] => 11            [3] => 6        )    [4] => Array        (            [0] => 32            [1] => 17            [2] => 29            [3] => 20        )    [5] => Array        (            [0] => 30            [1] => 19            [2] => 31            [3] => 18        )    [6] => Array        (            [0] => 28            [1] => 21            [2] => 25            [3] => 24        )    [7] => Array        (            [0] => 26            [1] => 23            [2] => 27            [3] => 22        ))
只是調動位置

確實是調換位置,這個有規律些

[12, 5, 9, 8] [10,7, 9 , 8] 是我寫錯,不好意思。宗各位所述已經解決謝謝你們。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.