2016-04-03 52 views
1

我有兩個數組。我想根據他們的關鍵匹配進行合併。這是我的第一個數組如果兩個數組鍵匹配,然後創建一個新的數組與他們的值

array(
    (int) 1 => 'Home', 
    (int) 7 => 'FAQs', 
    (int) 16 => 'Roles', 
    (int) 21 => 'Terms & Condition', 
    (int) 24 => 'Registration', 
    (int) 4 => 'Posts' 
) 

我的第二個陣列

array(
    (int) 4 => array(
      (int) 0 => 'All Posts', 
      (int) 1 => 'Post Add' 
    ), 
    (int) 7 => array(
      (int) 0 => 'FAQ Add', 
      (int) 1 => 'All FAQs' 
    ), 
    (int) 16 => array(
      (int) 0 => 'Add Role', 
      (int) 1 => 'All Role & Actions' 
    ), 
    (int) 21 => array(
       (int) 0 => 'Add Terms & Condition', 
       (int) 1 => 'Terms & Conditions' 
    ) 
) 

我想要做的是建立與他們的價值觀,如果關鍵matches.like 這樣一個新的數組。這甚至可以像這樣合併它們嗎?

array(
    'Posts' => array(
      (int) 0 => 'All Posts', 
      (int) 1 => 'Post Add' 
    ), 
    'FAQs' => array(
      (int) 0 => 'FAQ Add', 
      (int) 1 => 'All FAQs' 
    ), 
    'Registration' => array(), 
    'Home'=>array(), 
    'Roles' => array(
      (int) 0 => 'Add Role', 
      (int) 1 => 'All Role & Actions' 
    ), 
    'Terms & Condition' => array(
       (int) 0 => 'Add Terms & Condition', 
       (int) 1 => 'Terms & Conditions' 
    ) 
) 
+3

我覺得有一個錯誤的問題,或者它不是很好的解釋。例如,第一個數組的鍵1和13沒有出現在第二個數組中,但結果有一個與1 => home相關的鍵,但不是與13 => menu&actions相關的鍵。爲什麼?另外第二個陣列的關鍵10有4個項目,但結果有2個,但沒有其他兩個。爲什麼?如果按鍵匹配這種方式,也是「一個新數組,它們的值如何」,確切地說哪些鍵與哪個鍵匹配,以什麼方式?你能重新檢查這個問題以確保沒有錯誤,並解釋爲什麼其他2個答案不好嗎? – Stilez

+0

要得到正確答案,您必須回覆@Stilez註釋,並解釋排序標準,因爲它基於第二個數組,隨機插入第一個數組元素。 – fusion3k

+0

@stilez - 對不起,我的壞。謝謝你指出。 1.我想說如果key在第二個數組中不可用,則返回一個數組與第二個數組匹配,並從第一個數組中返回空數組。 2. 13第一個數組中沒有任何鍵應該是10,這是數據輸入時的錯誤。 3。第一個答案部分有效。如果key與第二個數組不匹配,它不會返回空數組。 – Amir

回答

2

嘗試

<?php 
$new_array = array(); 
foreach($first_array as $key=>$value){ 
    if(array_key_exists($key, $second_array)){ 
    $new_aray[$value] = $arr2[$key]; 
    } 
} 
print_r($new_array); 

希望它能幫助:)

+0

已經嘗試過。無論如何感謝 – Amir

+0

如果鍵不匹配,然後返回註釋,所以我用其他條件提供所需的輸出,但錯誤是未定義的偏移量1,24 – Amir

+0

它的工作原理如需。只是添加其他 其他{ $ new_array [$ value] = array(); } – Amir

1

試試這個循環了:如果你想使用第一個數組爲基礎(保持所有值

$thirdArray = array(); 

foreach($firstArray as $fk => $fv){ 
    if(isset($secondArray[$fk])){ 
     $thirdArray[$fv] = $secondArray[$fk]; 
    } 
} 

var_dump($thirdArray); 
1

鑰匙),您可以試用array_maparray_flip$menus是你的第一個陣列,$submenus是2排列):

$menu = array_map 
(
    function($key) use($submenus) 
    { 
     return (isset($submenus[$key])) ? $submenus[$key] : array(); 
    }, 
    array_flip($menus) 
); 

$menu數組現在包含:

Array 
(
    [Home] => Array 
     (
     ) 
    [FAQs] => Array 
     (
      [0] => FAQ Add 
      [1] => All FAQs 
     ) 
    [Menu & Actions] => Array 
     (
     ) 
    [Roles] => Array 
     (
      [0] => Add Role 
      [1] => All Role & Actions 
     ) 
    [Terms & Condition] => Array 
     (
      [0] => Add Terms & Condition 
      [1] => Terms & Conditions 
     ) 
    [Registration] => Array 
     (
     ) 
    [Posts] => Array 
     (
      [0] => All Posts 
      [1] => Post Add 
     ) 
) 

eval.in demo

我們使用array_map映射翻轉$menus陣列( array_flip反轉鍵和值):在anonymous function內部使用array_map,我們在$submenus鍵中搜索給定的$menus值(最初的鍵):如果鍵存在,我們返回它,否則我們返回一個空數組。


+0

謝謝,我一定會研究它 – Amir

相關問題