Несоответствие массива PHP?

У меня есть код, который помещает значения в массив PHP через array_push(), Тем не менее, когда я делаю print_r() в массиве он пропускает ключ, и конечный результат выглядит следующим образом:

Array (
[0] => appease
[1] => cunning
[2] => derisive
[3] => effeminate
[4] => grievance
[5] => inadvertently miscreants
[7] => ominous
[8] => resilient
[9] => resolute
[10] => restrain
[11] => superfluous
[12] => trudged
[13] => undiminished
)

Как видите, он пропустил 6-е значение и перешел к следующему. По какой-то причине, если я позвоню foreach() метод в массиве, он останавливается после «обиды» или индекса 4. Кто-нибудь знает, почему он это делает?

Изменить: если я сделаю echo $words[6], он печатает значение 6-го индекса правильно.

Изменить 2: вот мой код:

$return = file_get_contents($target_file);
$arr = explode('<U><B>', $return);
$a = 1;

$words = [];

foreach($arr as $pos) {
$important = substr($arr[$a], 0, 20);
$arr2 = explode("</B></U>",$important);
array_push($words,strtolower(trim($arr2[0])));
$a++;
}

Содержимое файла:

<U><B>appease</B></U><U><B>cunning</B></U><U><B>derisive</B></U><U><B>effeminate</B></U><U><B>grievance</B></U><U><B>inadvertently</B></U><U><B>miscreants</B></U><U><B>ominous</B></U><U><B>resilient</B></U><U><B>resolute</B></U><U><B>restrain</B></U><U><B>superfluous</B></U><U><B>trudged</B></U><U><B>undiminished</B></U>

* удалены некоторые ненужные файлы для удобства чтения

-1

Решение

я написал что-то попроще:

<?php
$return="<U><B>appease</B></U><U><B>cunning</B></U><U><B>derisive</B></U><U><B>effeminate</B></U><U><B>grievance</B></U><U><B>inadvertently</B></U><U><B>miscreants</B></U><U><B>ominous</B></U><U><B>resilient</B></U><U><B>resolute</B></U><U><B>restrain</B></U><U><B>superfluous</B></U><U><B>trudged</B></U><U><B>undiminished</B></U>";

$arr = explode('<U><B>', $return);$words = [];

foreach($arr as $pos) {
if(!empty($pos)){
$words[]=strip_tags($pos);
}
}echo '<pre>';
print_r($words);

демо: http://codepad.viper-7.com/XeUWui

1

Другие решения

$arr = "<U><B>appease</B></U><U><B>cunning</B></U><U><B>derisive</B></U><U><B>effeminate</B></U><U><B>grievance</B></U><U><B>inadvertently</B></U><U><B>miscreants</B></U><U><B>ominous</B></U><U><B>resilient</B></U><U><B>resolute</B></U><U><B>restrain</B></U><U><B>superfluous</B></U><U><B>trudged</B></U><U><B>undiminished</B></U>";

$arr = explode('<U><B>', $arr);
$a = 1;

foreach($arr as &$pos)
{
if(!empty($pos))
{
$pos = str_replace("</B></U>","",$pos);
}
}

print_r(array_filter($arr));
0

Может быть излишним, но всегда есть SimpleXml также:

$arr = "<U><B>appease</B></U><U><B>cunning</B></U><U><B>derisive</B></U><U><B>effeminate</B></U><U><B>grievance</B></U><U><B>inadvertently</B></U><U><B>miscreants</B></U><U><B>ominous</B></U><U><B>resilient</B></U><U><B>resolute</B></U><U><B>restrain</B></U><U><B>superfluous</B></U><U><B>trudged</B></U><U><B>undiminished</B></U>";
$xml = new SimpleXmlElement('<root>' . $arr . '</root>');
$words = $xml->xpath('//B');

foreach ($words as $i =>$word) {
printf("%d.\t%s\n", $i+1, $word);
}
0

Это довольно просто с регулярным выражением:

<?php

$words = "<U><B>appease</B></U><U><B>cunning</B></U><U><B>derisive</B></U><U><B>effeminate</B></U><U><B>grievance</B></U><U><B>inadvertently</B></U><U><B>miscreants</B></U><U><B>ominous</B></U><U><B>resilient</B></U><U><B>resolute</B></U><U><B>restrain</B></U><U><B>superfluous</B></U><U><B>trudged</B></U><U><B>undiminished</B></U>";

preg_match_all("#<U><B>(.*?)</B></U>#",$words,$matches);

print_r($matches[1]);
?>

Скрипка здесь

0
По вопросам рекламы [email protected]