2017-07-23 96 views
-5

我有以下多維數組:刪除/未設定的數組元素相匹配的鍵/另一個數組元素的值[PHP]

$messages = array(

    'message1'=>array(
    'type'=>'voice', 
    'call-id'=>'11' 
    'id'='message1' 
), 
    'message2'=>array(
    'type'=>'voice', 
    'call-id'=>'44' 
    'id'='message2' 
), 
    'message3'=>array(
    'type'=>'text', 
    'call-id'=>'44' 
    'id'='message3' 
), 
    'message4'=>array(
    'type'=>'text', 
    'call-id'=>'55' 
    'id'='message4' 
), 
    'message5'=>array(
    'type'=>'voice', 
    'call-id'=>'55' 
    'id'='message5' 
), 

); 

我需要刪除/取消設置例如$消息[「消息2」] ,因爲還有另一個數組元素($ messages ['message3']),其中包含鍵和值('type'=>'text','call-id'=>'44')。

基本上,如果我們有兩個具有相同call-id的元素,則刪除type = voice的元素。

因此,陣列的上述結果應該是:

$messages = array(

    'message1'=>array(
    'type'=>'voice', 
    'call-id'=>'11' 
    'id'='message1' 
), 
    'message3'=>array(
    'type'=>'text', 
    'call-id'=>'44' 
    'id'='message3' 
), 
    'message4'=>array(
    'type'=>'text', 
    'call-id'=>'55' 
    'id'='message4' 
), 

); 
+1

你嘗試過什麼等等遠?你的代碼在哪裏?請參閱**如何提出一個好問題** https://stackoverflow.com/help/how-to-ask – BenRoob

回答

0

試試這個:

<?php 
$messages = array(

    'message1'=>array(
    'type'=>'voice', 
    'call-id'=>'11', 
    'id'=>'message1' 
), 
    'message2'=>array(
    'type'=>'voice', 
    'call-id'=>'44', 
    'id'=>'message2' 
), 
    'message3'=>array(
    'type'=>'text', 
    'call-id'=>'44', 
    'id'=>'message3' 
), 
    'message4'=>array(
    'type'=>'text', 
    'call-id'=>'55', 
    'id'=>'message4' 
), 
    'message5'=>array(
    'type'=>'voice', 
    'call-id'=>'55', 
    'id'=>'message5' 
), 

); 

$unique = []; 

foreach ($messages as $value) { 
    if ($value['type'] == 'text') { 
     $unique[$value['call-id']] = $value; 
    // so text comes first and override any previous value with the same call-id 
    } else if (!array_key_exists($value['call-id'], $unique)) { 
     $unique[$value['call-id']] = $value; 
    // will be added only if no same call-id and will be overridden if same call-id with type text after 
    } 
} 

foreach ($unique as $value) { 
    $array[$value['id']] = $value; 
} 

echo '<pre>'; 
print_r($array); 

OUTPUT:

Array 
(
    [message1] => Array 
     (
      [type] => voice 
      [call-id] => 11 
      [id] => message1 
     ) 

    [message3] => Array 
     (
      [type] => text 
      [call-id] => 44 
      [id] => message3 
     ) 

    [message4] => Array 
     (
      [type] => text 
      [call-id] => 55 
      [id] => message4 
     ) 

) 

http://www.phpwin.org/s/LJxrQw

+0

這是不對的。 'call-id' => 55 with'type' =>語音應該被刪除,而不是文本。 –

+0

@MichaelEugeneYuen,感謝您的快速響應,但元素'message5'應該被刪除/取消設置,並保留元素'message4',因爲它的類型是'text''而不是語音。 –

+0

回答已更新! –