Удалить связанный элемент из многомерного массива в php

У меня есть такой массив данных изображения:

[other-image] => Array
        (
            [img] => Array
                (
                    [0] => 1526973657.jpg
                    [1] => 1526973661.jpg
                    [2] => 1526973665.jpg
                )

            [path] => Array
                (
                    [0] => ../post-upload/1/
                    [1] => ../post-upload/1/
                    [2] => ../post-upload/1/
                )

            [type] => Array
                (
                    [0] => 1
                    [1] => 1
                    [2] => 1
                )

            [thumb] => Array
                (
                    [0] => thumb_1526973661.jpg
                    [1] => thumb_1526973665.jpg
                    [2] => thumb_1526973668.jpg
                )

        )

Теперь я хочу удалить изображение и все связанные с ним данные из подмассивов. (путь, тип, данные большого пальца)

Вот как я это пробовал в php:

  $delkey = '1526973657.jpg';
  if (in_array($delkey, $_SESSION['other-image']['img'])){
      $imgkey = array_search($delkey, $_SESSION['other-image']['img']);
      if ($imgkey) unset($_SESSION['other-image']['img'][$imgkey]);
  }

Но проблема в том, что я не могу удалить связанные данные из других массивов. Кто-нибудь может сказать мне, как это сделать? Спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
40
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Связанные данные имеют тот же ключ с img? Если они такие же, я думаю, вам нужно только добавить несколько кодов для удаления других данных, как это было сделано для удаления img.

if ($imgkey) unset($_SESSION['other-image']['path'][$imgkey]);
if ($imgkey) unset($_SESSION['other-image']['type'][$imgkey]);
if ($imgkey) unset($_SESSION['other-image']['thumb'][$imgkey]);

Если ключи в подмассиве img связаны с одним и тем же ключом (индексом) в подмассивах (путь, тип и ползунок, вы также можете отключить эти ключи, например.

$delkey = '1526973657.jpg';
if (in_array($delkey, $_SESSION['other-image']['img'])){
    $imgkey = array_search($delkey, $_SESSION['other-image']['img']);
    if ($imgkey){
        unset($_SESSION['other-image']['img'][$imgkey]);
        unset($_SESSION['other-image']['path'][$imgkey]);
        unset($_SESSION['other-image']['type'][$imgkey]);
        unset($_SESSION['other-image']['thumb'][$imgkey]);
    }
}
Ответ принят как подходящий

Вы должны использовать !==false после array_search(), потому что он может возвращать первый индекс, т.е. 0 в некоторых случаях, поэтому ваше условие не будет выполнено. Что касается удаления связанных данных из других массивов, вам необходимо отключить другие данные, связанные с этим ключом.

if ($imgkey!==false){
        unset($_SESSION['other-image']['img'][$imgkey]);
        unset($_SESSION['other-image']['path'][$imgkey]);
        unset($_SESSION['other-image']['type'][$imgkey]);
        unset($_SESSION['other-image']['thumb'][$imgkey]);
    }

да, это работает. но я не могу понять логику .. не могли бы вы уточнить?

user3733831 22.05.2018 09:52

From php.net/manual/en/function.array-search.php - возвращает ключ для иглы, если он найден в массиве, в противном случае - FALSE. В вашем примере вы ищете «1526973657.jpg», и он находится в индексе 0 массива, поэтому поиск по массиву вернет 0. если вы напишете if ($imgkey), он не войдет внутрь, если условие, поэтому данные не будут удалены, даже если они существуют в массиве.

Bhaskar Jain 22.05.2018 10:11

Другие вопросы по теме