2016-11-25 19 views
-1

這是我的第二部分我的問題,following part 1這是可能的組合在PHP中的兩個數組? (第二部分)

我有兩個數組簽名和指定。簽署國和指定陣列的分隔符"|"表明每個簽名都有1,2個或更多簽名,這與簽名相同,取決​​於多少分隔符。如果元素在分隔符和其他數組中有1,2或多個值,我想輸出。它會產生另一個副本或克隆。就像這樣:

$signatories = array('Allan|Joshua|Ronald' , 'Robert|Mellisa' , 'Maria'); 

$designations = array('CEO|OIC' , 'CEO|COO|MANAGER' , 'MANAGER|OIC|COO'); 

我的期望輸出:

***Array [0]*** 

Allan - CEO 
Joshua - CEO 
Ronald- CEO 
Allan - OIC 
Joshua - OIC 
Ronald- OIC 

***Array [1]*** 

Robert - CEO 
Mellisa - CEO 
Robert - COO 
Mellisa - COO 
Robert - MANAGER 
Mellisa - MANAGER 

***Array [2]*** 

Maria - MANAGER 
Maria - OIC 
Maria- COO 
+0

注意,堆棧溢出不打算作爲一個地方,您可以訂購免費代碼。因此,對於你的兩個問題,你會顯示你已經嘗試了什麼以及你卡在哪裏? – halfer

回答

0
<?php 
$signatories = array('Allan|Joshua|Ronald' , 'Robert|Mellisa' , 'Maria'); 

$designations = array('CEO|OIC' , 'CEO|COO|MANAGER' , 'MANAGER|OIC|COO'); 

if (count($signatories) > count($designations)) 
    Die("Sorry, but number of signatories is larger than number of designations, cannot continue."); 

$result = []; 
foreach ($signatories as $k => $v) { 
    $subresult = []; 
    $e = explode('|', $v); 
    $e2 = explode('|', $designations[$k]); 
    foreach ($e as $name) { 
     foreach ($e2 as $designation) { 
      $subresult[] = $name.' - '.$designation;  
     } 

    } 
    $result[] = $subresult; 
} 

echo "<pre>"; 
var_dump($result); 
echo "</pre>"; 
0
$signatories = array('Allan|Joshua|Ronald' , 'Robert|Mellisa' , 'Maria'); 

$designations = array('CEO|OIC' , 'CEO|COO|MANAGER' , 'MANAGER|OIC|COO'); 

foreach($signatories as $key=>$item){ 
    $itemSet = explode('|', $item); 
    foreach($itemSet as $row){ 
     $desSet = explode('|', $designations[$key]); 
     foreach($desSet as $pos){ 
      echo $row." - ".$pos; 
      echo "<br/>"; 
     } 
    } 
} 
0

你需要兩個循環,可以使用相同的索引。

$signatories = array('Allan|Joshua|Ronald', 'Robert|Mellisa', 'Maria'); 
$designations = array('CEO|OIC', 'CEO|COO|MANAGER', 'MANAGER|OIC|COO'); 

$cs = count($signatories); 
for ($i=0; $i<$cs; $i++) { 
    $desigs = explode('|', $designations[$i]); 
    $signas = explode('|', $signatories[$i]); 
    foreach ($desigs as &$desig) { 
    foreach ($signas as &$signa) { 
     echo $signa.' - '.$desig.'<br>'; 
    } 
    } 
} 
1

的功能的方法(easist理解如果從後面/ BUTTOM式讀取):

$signatories = array('Allan|Joshua|Ronald', 'Robert|Mellisa', 'Maria'); 
$designations = array('CEO|OIC','CEO|COO','MANAGER|OIC|COO'); 

$result = array_map(function ($names, $titles) { 
    return call_user_func_array('array_merge', array_map(function ($name) use ($titles) { 
    return array_map(function ($title) use ($name) { 
     return $name . ' - ' . $title; 
    }, explode('|', $titles)); 
    }, explode('|', $names))); 
}, $signatories, $designations); 

這產生這樣的結果:

Array 
(
    [0] => Array 
     (
      [0] => Allan - CEO 
      [1] => Allan - OIC 
      [2] => Joshua - CEO 
      [3] => Joshua - OIC 
      [4] => Ronald - CEO 
      [5] => Ronald - OIC 
     ) 

    [1] => Array 
     (
      [0] => Robert - CEO 
      [1] => Robert - COO 
      [2] => Mellisa - CEO 
      [3] => Mellisa - COO 
     ) 

    [2] => Array 
     (
      [0] => Maria - MANAGER 
      [1] => Maria - OIC 
      [2] => Maria - COO 
     ) 

) 

此解決方案使用內置在PHP函數中解決問題:

  1. 首先,將這兩個陣列與array_map一起「壓縮」。
  2. 然後對每個名稱與該對中的每個標題進行組合。
  3. 最後,數組變平。

PHP沒有一個數組扁平化的功能就是這是什麼:

call_user_func_array('array_merge', $input); 

你也可以考慮使用RecursiveIterator from SPL

相關問題