У меня есть такой массив данных изображения:
[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]);
}
Но проблема в том, что я не могу удалить связанные данные из других массивов. Кто-нибудь может сказать мне, как это сделать? Спасибо.






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