2017-07-23 47 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

回答已更新! –