Сбрасывание массива оценивает в цикле foreach [дубликат]

Этот вопрос уже имеет ответ здесь:

Мне настраивали цикл 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
        )

)

Спасибо!

63
задан Matt 5 January 2010 в 21:00
поделиться

5 ответов

[

]Попробуйте:[

] [
foreach ($images as $key => &$image) {
    if (yourConditionGoesHere) {
        unset($images[$key])
    }
}
] [

]Обычно foreach работает с копией вашего массива, так что все изменения, которые вы делаете, вносятся в эту копию и не влияют на действительный массив.[

] [

]Поэтому вам нужно снять значения через $images[$key];[

] [

]Ссылка на &$image предотвращает создание в цикле копии массива, которая будет пустой тратой памяти.[

].
57
ответ дан 24 November 2019 в 16:12
поделиться
[

][]$образ [] в вашем случае является значением элемента, а не ключом. Для получения ключа также используйте следующий синтаксис:[

] [
foreach ($images as $key => $value) {
    /* … */
}
] [

]Теперь вы можете удалить элемент с помощью []unset($images[$key])[].[

].
4
ответ дан 24 November 2019 в 16:12
поделиться
[

] Одним из решений будет использование ключа ваших элементов для их удаления - вы можете использовать как ключи, так и значения при петлевых операциях с помощью [] 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]);
    }
}
]
1
ответ дан 24 November 2019 в 16:12
поделиться
[

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.[

]
1
ответ дан 24 November 2019 в 16:12
поделиться
[
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]);
    }
}
]
80
ответ дан 24 November 2019 в 16:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: