Array_Diff удаляет только ключ / значение из массива объектов, но не весь объект - PullRequest
0 голосов
/ 07 мая 2020

У меня есть сценарий, который в конечном итоге создает массив JSON. Создание массива JSON работает нормально, за исключением того, что я не могу удалить весь объект из массива объектов при поиске определенного значения c ключей.

Создание массива:

$sql="SELECT * FROM `emails` WHERE `subject` LIKE '%5678%' order by `id` DESC LIMIT 50";
$result = mysqli_query($DatabasePointer2,$sql) or die(mysqli_error($DatabasePointer2));
$row_cnt = mysqli_num_rows($result); 
if($row_cnt>0) {
    $array = array();
    $i=0;
    while($row = mysqli_fetch_array($result)) {
        $i++;
        $a1 = explode('-', $row['body']);
        $a1[0] = str_replace("","",$a1[0]);
        $a1[1] = str_replace("TF: ","",$a1[1]);
        $a1[1] = str_replace("minutes","M",$a1[1]); 
        $a = array(
            "p" => "test", 
            "id" => $row['id'], 
            "thekey" => $a1[1], 
            "time" => $dt->format('Y-m-d H:i:s'), 
            "utctime" => strtotime($dt->format('Y-m-d H:i:s')), 
            "utc2" =>  $two->format('Y-m-d H:i:s'), 
            "utc3" =>  $three->format('Y-m-d H:i:s')
            );
        $a1 = array_diff($a, ["keytoexclude1", "keytoexclude2", "keytoexclude3"]);

        $array[] = $a1;
    }       
}
echo json_encode($array, JSON_UNESCAPED_SLASHES);

Обратите внимание, что значение thekey не является статическим c.

Код выше, производит следующее:

[{
    "p": "test",
    "id": "198645",
    "time": "2020-05-06 23:00:49",
    "utctime": 1588806049,
    "utc2": "2020-05-07 01:00:49",
    "utc3": "2020-05-07 02:00:49"
}, {
    "p": "test",
    "id": "198605",
    "time": "2020-05-06 22:00:55",
    "utctime": 1588802455,
    "utc2": "2020-05-07 00:00:55",
    "utc3": "2020-05-07 01:00:55",
    "thekey": "123456"
}, {
    "p": "test",
    "id": "198604",
    "time": "2020-05-06 22:00:54",
    "utctime": 1588802454,
    "utc2": "2020-05-07 00:00:54",
    "utc3": "2020-05-07 01:00:54"
}]

То, что я пытаюсь выполнить sh, - это поиск любого ключа, который соответствует списку исключений, а затем удаление всего объекта, если он находит ключ в списке исключений.

Список исключений / Код для удаления ...

$a1 = array_diff($a, ["keytoexclude1", "keytoexclude2", "keytoexclude3"]);

Что происходит, так это то, что он просто удаляет ключ / значение сам, но сохраняет остальную часть объекта. Если вы посмотрите на массив выше, вы увидите, что если было найдено исключение, оно удаляет только «ключ» и его значение из объекта, но оставляет остальные ключи в объектах.

Может кто-нибудь, пожалуйста, помогите, как удалить весь объект?

** Обновлено, чтобы показать ошибку, когда значение для "ключа" должно поступать не из базы данных mysql, а из взорванного массива.

1 Ответ

0 голосов
/ 07 мая 2020

Используйте оператор if, чтобы проверить, находится ли значение в списке исключений, и пропустите строку.

    while($row = mysqli_fetch_array($result)) {
        if (in_array($row['thevalue'], ["keytoexclude1", "keytoexclude2", "keytoexclude3"])) {
            continue;
        }
        $a = array(
            "p" => "test", 
            "id" => $row['id'], 
            "thekey" => $row['thevalue'], 
            "time" => $dt->format('Y-m-d H:i:s'), 
            "utctime" => strtotime($dt->format('Y-m-d H:i:s')), 
            "utc2" =>  $two->format('Y-m-d H:i:s'), 
            "utc3" =>  $three->format('Y-m-d H:i:s')
            );
        $array[] = $a1;
    }       

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...