Этот вопрос уже имеет ответ здесь:
Мне настраивали цикл foreach, чтобы пройти мой массив, проверить на определенную ссылку, и если он находит, что удаляет ту ссылку из массива.
Мой код:
foreach($images as $image)
{
if($image == 'http://i27.tinypic.com/29yk345.gif' ||
$image == 'http://img3.abload.de/img/10nx2340fhco.gif' ||
$image == 'http://i42.tinypic.com/9pp2456x.gif')
{
unset($images[$image]);
}
}
Но это не удаляет записи массива. Это - вероятно, что-то, чтобы сделать с $images[$image]
, поскольку это не ключ записи массива, только содержание? Существует ли способ сделать это, не включая счетчик?
Спасибо.
Править: Спасибо парни, но теперь у меня есть другая проблема, где записи массива на самом деле не становятся удаленными.
Мой новый код:
foreach($images[1] as $key => $image)
{
if($image == 'http://i27.tinypic.com/29yk345.gif')
$image == 'http://img3.abload.de/img/10nx2340fhco.gif' ||
$image == 'http://i42.tinypic.com/9pp2456x.gif')
{
unset($images[$key]);
}
}
$images является действительностью двухмерная антенная решетка теперь следовательно, почему мне нужен $images [1]. Я проверил, и это успешно обходит элементы массива, и некоторые элементы действительно на самом деле имеют некоторые из тех URL в этом, я хочу удалить, но они не становятся удаленными. Это - мой $images
массив:
Array
(
[0] => Array
(
[0] => useless
[1] => useless
[2] => useless
[3] => useless
[4] => useless
)
[1] => Array
(
[0] => http://i27.tinypic.com/29yk345.gif
[1] => http://img3.abload.de/img/10nx2340fhco.gif
[2] => http://img3.abload.de/img/10nx2340fhco.gif
[3] => http://i42.tinypic.com/9pp2456x.gif
)
)
Спасибо!
]Попробуйте:[
] [foreach ($images as $key => &$image) {
if (yourConditionGoesHere) {
unset($images[$key])
}
}
]
[]Обычно foreach работает с копией вашего массива, так что все изменения, которые вы делаете, вносятся в эту копию и не влияют на действительный массив.[
] []Поэтому вам нужно снять значения через $images[$key];[
] []Ссылка на &$image предотвращает создание в цикле копии массива, которая будет пустой тратой памяти.[
].][]$образ [
] в вашем случае является значением элемента, а не ключом. Для получения ключа также используйте следующий синтаксис:[
foreach ($images as $key => $value) {
/* … */
}
]
[]Теперь вы можете удалить элемент с помощью []unset($images[$key])[
].[
] Одним из решений будет использование ключа ваших элементов для их удаления - вы можете использовать как ключи, так и значения при петлевых операциях с помощью [] foreach[]. [
] []Например :[
] [$arr = array(
'a' => 123,
'b' => 456,
'c' => 789,
);
foreach ($arr as $key => $item) {
if ($item == 456) {
unset($arr[$key]);
}
}
var_dump($arr);
]
[]выдаст вам этот массив, в конце :[
] [array
'a' => int 123
'c' => int 789
]
[][
]
Что означает, что в вашем случае, что-то подобное должно выполнить трюк :[
foreach($images as $key => $image)
{
if($image == 'http://i27.tinypic.com/29yk345.gif' ||
$image == 'http://img3.abload.de/img/10nx2340fhco.gif' ||
$image == 'http://i42.tinypic.com/9pp2456x.gif')
{
unset($images[$key]);
}
}
]
foreach($images as $key=>$image)
{
if($image == 'http://i27.tinypic.com/29ykt1f.gif' ||
$image == 'http://img3.abload.de/img/10nxjl0fhco.gif' ||
$image == 'http://i42.tinypic.com/9pp2tx.gif')
{ unset($images[$key]); }
}
]
[]!!foreach($images as $key=>$image[
] []cause $image is the value, so $images[$image] is the value, so $images[$image] is no sense.[
]foreach($images as $key => $image)
{
if(in_array($image, array(
'http://i27.tinypic.com/29ykt1f.gif',
'http://img3.abload.de/img/10nxjl0fhco.gif',
'http://i42.tinypic.com/9pp2tx.gif',
))
{
unset($images[$key]);
}
}
]