如果之前在基本数组中看到过 id,则从多维数组中移除

Remove from multidimensional array if has seen id before in an basic array

我想在 php 中通过使用类似这样的方法将 msgid 记录到文本文件来停止重复消息 file_put_contents("a.txt", implode(PHP_EOL, $array1), FILE_APPEND); 然后使用 $array1 = file("a.txt"); 将其转换回数组 我还想从数组中删除来自集合名称的消息 我知道如何将 json 转换为数组 $array1 = json_decode($json, true); Json 来自 api 我无法控制的回复

{
  "API": "Online",
  "MSG": [
    {
      "info": {
        "name": "example"
      },
      "msg": "example",
      "msgid": "example"
    },
    {
      "info": {
        "name": "example"
      },
      "msg": "example",
      "msgid": "example"
    }
  ]
}

您好,请使用以下代码,首先对其进行相应的测试

$uniqueMessages = unique_multidim_array($messages,'msg');

用法:将键作为第二个参数传递,您需要检查数组的唯一性。

<?php
/* Function to handle unique assocative array */
function unique_multidim_array($array, $key) {
    /* temp array to hold unique array */
        $temp_array = array();

    /* array to hold */
        $i = 0;
    /* array to hold the key for unique array */
    $key_array = array();

        foreach($array as $val) {
            if (!in_array($val[$key], $key_array)) {
                    $key_array[$i] = $val[$key];
                    $temp_array[$i] = $val;
            }
            $i++;
        }
    return $temp_array;
}

$messages = array(
    0 => array(
        'info' => array(
            'name' => 'example'     
        ),
        'msg' => 'example',
        'msgid' => 'example'
    ),
    1 => array(
        'info' => array(
            'name' => 'example 1'       
        ),
        'msg' => 'example 1',
        'msgid' => 'example 1'
    ),
    3 => array(
        'info' => array(
            'name' => 'example'     
        ),
        'msg' => 'example',
        'msgid' => 'example'
    )

);


echo '<pre>';

echo '*****************BEFORE***********************<br/>';
var_dump($messages);

echo '*****************AFTER***********************<br/>';

$uniqueMessages = unique_multidim_array($messages,'msg');
var_dump($uniqueMessages);

这对我有用,这是一个修改后的函数 click here for original function

function RemoveElementByArray($array, $key, $seen){
         foreach($array as $subKey => $subArray){
              if(in_array($subArray[$key], $seen)){
                   unset($array[$subKey]);
              }
         }
         return $array;
    }

示例:

$array = array(
array("id" => "1", "name" => "example1"),
array("id" => "2", "name" => "example2"),
array("id" => "3", "name" => "example3"));
$SeenArray = array("1", "2");
print_r(RemoveElementByArray($array, "id", $SeenArray));

结果:

Array
(
    [2] => Array
        (
            [id] => 3
            [name] => example3
        )

)