Я хочу объединить массивы

Epica95

Пользователь
Регистрация
19.11.15
Сообщения
2
Реакции
0
Баллы
1
Как объединить $showstrongs, $showstrongs2 и $showstrongs3 в массив $total_etymologyStrongs?
Я хочу объединить массивы
Код:
<?php
set_time_limit(90);
$string1 = "";
$string2 = "";
$string1 .= "-----<br /><br />\n";
$string1 .= "stripatag <pre style=\"color: red; font-weight: bold;\">";
$string2 .= "</pre> ";
$string2 .= "<br /><br />\n";
$all_etymologyStrongs = array();
$all_description_blb = array();
$blbdescription = "<span style=\"color: red; font-weight: bold;\"> The same as <a class=\"nowrap\" href=\"lexicon.cfm?strongs=H9&amp;t=KJV\" title=\"English: lost thing, that which was lost\"><span class=\"Hb\">אֲבֵדָה</span> (H9)</a>, incorrectly written for <a class=\"nowrap\" href=\"lexicon.cfm?strongs=H11&amp;t=KJV\" title=\"English: destruction\"><span class=\"Hb\">אֲבַדּוֹן</span> (H11)</a> </span>";
preg_match_all('/\(([H|G]{1}[0-9]+)\)/', $blbdescription, $showstrongs, PREG_SET_ORDER);
array_push($all_description_blb, $blbdescription);
array_push($all_etymologyStrongs, $showstrongs);
$total_description = array();
$total_etymologyStrongs = array();
$total_etym_desc = array();
for($a=0;$a<count($showstrongs);$a++){ $all_etymologyStrongs = array(); $all_description_blb = array(); $file_link = "[URL='https://wmlogs.com/yti/cwZZwcz1odHRwczovL2JsdWVsZXR0ZXJiaWJsZS5vcmcvbGFuZy9sZXhpY29uL2xleGljb24uY2ZtP1N0cm9umc0']https://www.blueletterbible.org/lang/lexicon/lexicon.cfm?Strongs=".$showstrongs[$a][1]."&t=KJV[/URL]"; $file = file_get_contents($file_link); preg_match_all("#<\b(div)\b[^>]*>(.*?)</\b(div)\b>#si", $file, $divout, PREG_SET_ORDER); $blbdescription = $divout[78][2]; preg_match_all('/\(([H|G]{1}[0-9]+)\)/', $blbdescription, $showstrongs2, PREG_SET_ORDER); array_push($all_description_blb, $blbdescription); array_push($all_etymologyStrongs, $showstrongs2); for($b=0;$b<count($showstrongs2);$b++){ $file_link2 = "[URL='https://wmlogs.com/yti/cwZZwcz1odHRwczovL2JsdWVsZXR0ZXJiaWJsZS5vcmcvbGFuZy9sZXhpY29uL2xleGljb24uY2ZtP1N0cm9umc0']https://www.blueletterbible.org/lang/lexicon/lexicon.cfm?Strongs=".$showstrongs2[$b][1]."&t=KJV[/URL]"; $file2 = file_get_contents($file_link2); preg_match_all("#<\b(div)\b[^>]*>(.*?)</\b(div)\b>#si", $file2, $divout, PREG_SET_ORDER); $blbdescription = $divout[78][2]; preg_match_all('/\(([H|G]{1}[0-9]+)\)/', $blbdescription, $showstrongs3, PREG_SET_ORDER); array_push($all_description_blb, $blbdescription); array_push($all_etymologyStrongs, $showstrongs3); }
}
$all_description_blb = array_values(array_unique($all_description_blb));
$string_description_blb = addslashes(implode("|", $all_description_blb));
array_push($total_etymologyStrongs, array_unique($all_etymologyStrongs));//implode("|", )
array_push($total_etym_desc, $string_description_blb);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[URL='https://wmlogs.com/yti/dk55kdGRodHRwOi8vdzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbCh52']http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/URL]">
<html xmlns="[URL='https://wmlogs.com/yti/b0hh0bWxodHRwOi8vdzMub3JnLzE5OTkveGvkT']http://www.w3.org/1999/xhtml[/URL]">
<head>
<meta http-equiv="Content-Type" content="текст/html; кодировка = utf-8" />
<title>Test: Strip a Tag 3</title>
</head>
<body>
<?php
echo $string1;
var_dump($showstrongs);
echo $string2;
echo $string1;
var_dump($total_etymologyStrongs);
echo $string2;
?>
</body>
</html>
PHP:
 

druidn

Пользователь
Регистрация
25.10.14
Сообщения
4
Реакции
0
Баллы
1
моя цель - собрать номер Стронга в следующих описаниях и по очереди искать ссылку и получать описания и еще номера Стронга до тех пор, пока номера Стронга не закончатся или не произойдет повторение номеров Стронга. Вот почему я создал цикл for внутри цикла for. Но, возможно, у вас есть более быстрый метод. Я пошел от $a = 0 до $d = 0, 4 уровня циклов. Но, может быть, можно обойтись и без повторяющихся ссылок?
 

EROLOVE

Пользователь
Регистрация
12.07.14
Сообщения
2
Реакции
0
Баллы
1
Хорошо, где я ошибаюсь (я не привык к «->» и «=>», так как не знаю, что они представляют или делают):
Код:
<?php
function walkDOMForTagAndClass($element, $tagName, $class, $callback) { if ($element->nodeType !== 1) return false; // invalid element $tagName = strtoupper($tagName); if ($walk = $element->firstChild) do { if ( ($walk->nodeType == 1) && (strtoupper($walk->nodeName) == $tagName) && ($walk->attributes->getNamedItem('class') == $class) ) $callback($walk); } while ( $walk = $walk->firstChild || $walk->nextSibling || ( $walk->parentNode == $element ? false : $walk->parentNode.nextSibling ) );
}
$file = "[URL='https://wmlogs.com/yti/SL11LSlZodHRwczovL2JsdWVsZXR0ZXJiaWJsZS5vcmcvbGFuZy9sZXhpY29uL2xleGljb24uY2ZtP1N0cm9uZ3M9SDEmdDmED']https://www.blueletterbible.org/lang/lexicon/lexicon.cfm?Strongs=H1&t=KJV[/URL]";
$doc = new DOMDocument();
$doc->loadHTMLFile($file);
walkDOMForTagAndClass( $doc, 'div', 'nocrumbs', function($file) { }
);

$xpath = new DOMXPath($doc);
$hrefs = $xpath->evaluate("/html/body//a");
for ($i = 0; $i < $hrefs->length; $i++) { $href = $hrefs->item($i); $url = $href->getAttribute('href'); $href->removeAttribute('target'); $href->setAttribute("target", "_blank"); $newURL=$url."/newurl"; $href->removeAttribute('href'); $href->setAttribute("href", $newURL);
}
$file=$doc->saveHTML();
echo $file;
?>
Код (разметка):
 

positiv1

Пользователь
Регистрация
08.09.14
Сообщения
3
Реакции
0
Баллы
1
Здесь могут быть опечатки или другие мелкие ошибки, они не проверялись, но должны дать вам общее представление. Приятно то, что подпрограмму можно будет повторно использовать для совпадений, и вы можете заменить $doc (ваш DOMDocument) на любую другую переменную DOMNode, включая полученный $node из walkDOMForTagAndClass, чтобы искать внутри нее другие теги и классы.

Более надежная версия, вероятно, определит, пусты ли $class или $tagName, правильно обработает возможность выхода классов из строя или наличия большего количества классов, чем включено, но для ваших целей это будет/должно подойти.
 

plsn

Пользователь
Регистрация
23.12.14
Сообщения
2
Реакции
0
Баллы
1
Да, и прежде чем кто-нибудь вмешается, НЕТ, это не опечатка:

Код:
} while (
$walk = $walk->firstChild || $walk->nextSibling || (
$walk->parentNode == $element ? false : $walk->parentNode.nextSibling
)
);
Код (разметка): это =, а не ==. Тест по заданию.
 

Parkoffer

Пользователь
Регистрация
16.06.15
Сообщения
2
Реакции
0
Баллы
1
Вы никогда не определяли $DOCUMENT_ROOT, конечно, он не определен. Вы не можете включить переменную, для которой не установлено значение... Просто избавьтесь от этой части.

$файл = 'https://www.blueletterbible.org/kjv/gen/1/1/s_1001';

Задержка полей HTML 5 - это немного сложнее, вам, возможно, придется либо загрузить DTD - который, я не уверен, работает с типом документа HTML 5 - либо просто подавить предупреждения. Мне не нравится отключать предупреждения, но при анализе плохого HTML это часто единственный выбор...

Вот почему я бы также отказался от переменных и включил это:



Код:
function walkForText($element) {
if ($element->nodeType !== 1) return false; // invalid element
$texts = [];
if ($walk = $element->firstChild) do {
if ($walk->nodeType == 3) $texts[] = $walk.nodeValue;
} while (
$walk = $walk->firstChild || $walk->nextSibling || (
$walk->parentNode == $element ? false : $walk->parentNode.nextSibling
)
);
return $texts;
}


Код (разметка): В это:

$doc = new DOMDocument(); $doc->loadHTMLFile( '[URL='https://wmlogs.com/yti/MAMMAMDFodHRwczovL2JsdWVsZXR0ZXJiaWJsZS5vcmcva2p2L2dlbi8xLzEvc18x1cv']https://www.blueletterbible.org/kjv/gen/1/1/s_1001[/URL]', LIBXML_NOWARNING );
Код (разметка): Хотя, честно говоря, этот сайт представляет собой крушение недействительной разметки с отсутствующими тегами, супом тегов, div просто так, бесконечными бессмысленными классами даром и ПОЛНЫМ отсутствием чего-либо, отдаленно напоминающего семантику, я в шоке от браузера. можно обработать его гораздо меньше, попытайтесь сделать строку или DOMDocument...

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

Кроме того, ваш цикл на самом деле должен либо выдавать ошибки, либо даже ничего не выводить - узлы типа 1, «элементы», не имеют значения nodeValue. Таким образом, HTML-тег — единственный тег, который вы действительно захватываете после перезаписи результата «*», — не имеет значения nodeValue для вывода. Это тег nodetype == 1, DOMElement. Что вы хотите сделать, так это пройтись по его дочерним элементам, чтобы найти любой тип узла 3, DOMText.

Соответствующие страницы руководства:
http://php.net/manual/en/class.domnode.php
http://php.net/manual/en/dom.constants.php

Процедура извлечения любых текстовых узлов изнутри элемента И всех его дочерних элементов будет выглядеть примерно так:

//$file = $DOCUMENT_ROOT. "test.html"; $file = $DOCUMENT_ROOT. "[URL='https://wmlogs.com/yti/MAMMAMDFodHRwczovL2JsdWVsZXR0ZXJiaWJsZS5vcmcva2p2L2dlbi8xLzEvc18x1cv']https://www.blueletterbible.org/kjv/gen/1/1/s_1001[/URL]"; $doc = new DOMDocument(); $doc->loadHTMLFile($file);
Код (разметка): Чтобы понять ход DOM, требуется немного практики, но при правильном использовании он невероятно эффективен. И быстро, так как вы не тратите так много времени на более медленные, требовательные к памяти процедуры, такие как различные getElementsBy... работаете ли вы на PHP с DOMDocument или на стороне клиента DOM в JavaScript.

Это немного грустно. БОЛЬШИНСТВО людей, говорящих об использовании DOM, понятия не имеют, что это такое и как его использовать. Посмотрите, как поклонники таких вещей, как jQuery и React, ГОВОРЯТ о том, что это помогает им использовать DOM, когда они вообще его не используют! БОЛЬШЕ, когда вы впадаете в идиотизм, такой как «Виртуальный DOM» и ЛОЖЬ, которая обманывает людей, которые ничего не знают, заставляя их использовать его.
 

deoronn

Пользователь
Регистрация
11.02.16
Сообщения
4
Реакции
0
Баллы
1
Честно говоря, вы занимаетесь ерундой по сопоставлению строк (в какой-то ужасающе плохой разметке) по сравнению с тем, что, вероятно, следует делать с чем-то вроде DOMDocument.

DOMDocument.loadHTMLFile, затем просто используйте JS-подобный метод getElement(s)Byчто бы ни методология прохождения документа.
 

1firstlena

Пользователь
Регистрация
25.03.15
Сообщения
4
Реакции
2
Баллы
3
Я начал смотреть, но время закончилось.

Я подозреваю, что array_merge — это та команда, которая вам нужна, но я совершенно не понимаю, какова на самом деле ваша цель.

Код:
<?php
function debug($var){ var_export($var); echo '<hr>';
}
$all_etymologyStrongs = $all_description_blb = $total_description = $total_etymologyStrongs = $total_etym_desc = array();
$blbdescription = "<span style='color: red; font-weight: bold;'> The same as <a class='nowrap' href='lexicon.cfm?strongs=H9&amp;t=KJV' title='Русский: потерянная вещь, то, что было потеряно'><span class='Hb'>אֲבֵדָה</span> (H9)</a>, incorrectly written for <a class='nowrap' href='lexicon.cfm?strongs=H11&amp;t=KJV' title='Английский: разрушение'><span class='Hb'>אֲבַדּוֹן</span> (H11)</a> </span>";
preg_match_all('/\(([H|G]{1}[0-9]+)\)/', $blbdescription, $showstrongs, PREG_SET_ORDER);
$all_description_blb = array_merge($all_description_blb, $blbdescription);
$all_etymologyStrongs = array_merge($all_etymologyStrongs, $showstrongs);
debug($blbdescription);
debug($showstrongs);
foreach($showstrongs as $v){ $all_etymologyStrongs = $all_description_blb = array(); $file_link = "[URL='https://wmlogs.com/yti/cwZZwcz1odHRwczovL2JsdWVsZXR0ZXJiaWJsZS5vcmcvbGFuZy9sZXhpY29uL2xleGljb24uY2ZtP1N0cm9umc0']https://www.blueletterbible.org/lang/lexicon/lexicon.cfm?Strongs=".$v[1]."&t=KJV[/URL]"; $file = file_get_contents($file_link); preg_match_all("#<\b(div)\b[^>]*>(.*?)</\b(div)\b>#si", $file, $divout, PREG_SET_ORDER); $blbdescription = $divout[78][2]; debug($blbdescription); preg_match_all('/\(([H|G]{1}[0-9]+)\)/', $blbdescription, $showstrongs2, PREG_SET_ORDER); $all_description_blb[] = $blbdescription; debug('showstrongs'); debug($showstrongs2); $all_etymologyStrongs = array_merge($all_etymologyStrongs, $showstrongs2); foreach($showstrongs2 as $b){ $file_link2 = "[URL='https://wmlogs.com/yti/cwZZwcz1odHRwczovL2JsdWVsZXR0ZXJiaWJsZS5vcmcvbGFuZy9sZXhpY29uL2xleGljb24uY2ZtP1N0cm9umc0']https://www.blueletterbible.org/lang/lexicon/lexicon.cfm?Strongs=".$showstrongs2[$b][1]."&t=KJV[/URL]"; $file2 = file_get_contents($file_link2); preg_match_all("#<\b(div)\b[^>]*>(.*?)</\b(div)\b>#si", $file2, $divout, PREG_SET_ORDER); $blbdescription = $divout[78][2]; preg_match_all('/\(([H|G]{1}[0-9]+)\)/', $blbdescription, $showstrongs3, PREG_SET_ORDER); array_merge($all_description_blb, $blbdescription); array_merge($all_etymologyStrongs, $showstrongs3); }
}
$all_description_blb = array_values(array_unique($all_description_blb));
$string_description_blb = addslashes(implode("|", $all_description_blb));
array_push($total_etymologyStrongs, array_unique($all_etymologyStrongs));//implode("|", )
array_push($total_etym_desc, $string_description_blb);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[URL='https://wmlogs.com/yti/dk55kdGRodHRwOi8vdzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbCh52']http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/URL]">
<html xmlns="[URL='https://wmlogs.com/yti/b0hh0bWxodHRwOi8vdzMub3JnLzE5OTkveGvkT']http://www.w3.org/1999/xhtml[/URL]"> <head> <meta http-equiv="Content-Type" content="текст/html; кодировка = utf-8" /> <title> Test: Strip a Tag 3 </title> </head> <body> <?php
debug($showstrongs);
debug($total_etymologyStrongs); ?> </body>
</html>
PHP:
 
Сверху Снизу