2017-05-04 20 views
-3

如何獲得像下面的格式使用PHP的數組,我想獲得如下定義的simillar結構。如何轉置陣列

我的數組是像下面順序,

$customarray = 
Array 
(
    [0] => Finish1 
    [1] => Hook1 
    [2] => Material1 
    [3] => Mounting1 
) 

Array 
(
    [0] => Finish2 
    [1] => Hook2 
    [2] => Material2 
    [3] => Mounting2 
) 

Array 
(
    [0] => Finish3 
    [1] => Hook3 
    [2] => Material3 
    [3] => Mounting3 
) 

合成陣列想下面的格式,

$resultantArray = 
Array 
(
    [0] => Finish1 
    [1] => Finish2 
    [2] => Finish3 
) 

Array 
(
    [0] => Hook1 
    [1] => Hook2 
    [2] => Hook3 
) 

Array 
(
    [0] => Material1 
    [1] => Material2 
    [2] => Material3 
) 
Array 
(
    [0] => Mounting1 
    [1] => Mounting2 
    [2] => Mounting3 
) 

任何幫助將appericiated,

感謝。

+0

附加您也嘗試過的代碼。 – Thamilan

+0

上面是我的數組代碼,我想轉換爲結果代碼。 –

+0

對不起,但這不是本網站的重點,我們不在這裏爲你做你的工作。你需要自己編寫代碼,只在這裏問你是否遇到了一個你自己無法解決的問題_在你自己解決任務的時候_。當然你會得到一些答案,但請公平地閱讀關於「如何在這裏問問」的文件。 – arkascha

回答

1

希望這將幫助你..

Try this code snippet here

<?php 

ini_set('display_errors', 1); 
$customarray = array(
    Array 
     (
     0 => "Finish1", 
     1 => "Hook1", 
     2 => "Material1", 
     3 => "Mounting1" 
    ), 
    Array 
     (
     0 => "Finish2", 
     1 => "Hook2", 
     2 => "Material2", 
     3 => "Mounting2" 
    ), 
    Array 
     (
     0 => "Finish3", 
     1 => "Hook3", 
     2 => "Material3", 
     3 => "Mounting3", 
    ) 
); 
$result=array(); 
for($x=0;$x<count($customarray);$x++) 
{ 
    for($y=0;$y<count($customarray[$x]);$y++) 
    { 
     $result[$y][$x]=$customarray[$x][$y];//here we are flipping values 
    } 
} 
print_r($result); 

輸出:

Array 
(
    [0] => Array 
     (
      [0] => Finish1 
      [1] => Finish2 
      [2] => Finish3 
     ) 

    [1] => Array 
     (
      [0] => Hook1 
      [1] => Hook2 
      [2] => Hook3 
     ) 

    [2] => Array 
     (
      [0] => Material1 
      [1] => Material2 
      [2] => Material3 
     ) 

    [3] => Array 
     (
      [0] => Mounting1 
      [1] => Mounting2 
      [2] => Mounting3 
     ) 

) 
+0

我會結帳並讓你知道。 –

+0

給OP先試的機會,然後你可以提供答案。這不被鼓勵!你可以成爲一個偉大的開發者,但OP將會如何變得偉大?這是更簡單的任務! – Thamilan

+0

@Thamilan是的,你說的對.. –

0

這樣做:

$a = []; //Your array 
/* 
    $a = array(
    Array 
    (
     0 => "Finish1", 
     1 => "Hook1", 
     2 => "Material1", 
     3 => "Mounting1" 
    ), 
Array 
    (
    0 => "Finish2" 
*/ 
$output = []; //output array 
foreach($a as $key => $innerArr){ 
    foreach($innerArr as $val){ 
     $valKey = preg_replace('/[0-9]+/', '', $val); 
     $output[$valKey][] = $val; 
    } 
} 
+0

請添加輸入數組或者一些例子,以便其他人可以嘗試代碼。 – arkascha

0

你可以用做一些array_mapcall_user_func_arrray魔法

$a = [ 
    ['11', '12', '13'], 
    ['21', '22', '23'], 
    ['31', '32', '33'], 
    ['41', '42', '43'], 
]; 

$b = call_user_func_array('array_map', array_merge((array)function() { 
    return func_get_args(); 
}, $a)); 

以下應該是比較容易理解的,因爲它的工作原理沒有array_merge

$b = call_user_func('array_map', function() { 
    return func_get_args(); 
}, ...$a); 

或更容易

$b = array_map(function() { 
    return func_get_args(); 
}, ...$a); 

如果你知道array_map的內部,你甚至可以縮短它的亮度只需傳遞null作爲回調函數即可多點更多

$b = array_map(null, ...$a); 
+0

有點像混淆;-) – arkascha

+0

是的 - 正如我所說 - 它是*魔術* ;-) – Philipp

+0

不,它通常被稱爲「壞風格」,因爲它很難閱讀。但肯定是有趣的解決方案 – arkascha