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

  • Автор темы Xkiohvlrit
  • Обновлено
  • 16, May 2024
  • #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&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&t=KJV\" title=\"English: destruction\"><span class=\"Hb\">אֲבַדּוֹן</span> (H11)</a> </span>";
//'/\([H|G]{1}([0-9]+)\)/'
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://lumtu.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://lumtu.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://lumtu.com/yti/dk55kdGRodHRwOi8vdzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbCh52']http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/URL]">
<html xmlns="[URL='https://lumtu.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:

Xkiohvlrit


Рег
19 Jan, 2013

Тем
68

Постов
214

Баллов
564
  • 21, May 2024
  • #2
моя цель - собрать номер Стронга в следующих описаниях и по очереди искать ссылку и получать описания и еще номера Стронга до тех пор, пока номера Стронга не закончатся или не произойдет повторение номеров Стронга.

Вот почему я создал цикл for внутри цикла for.

Но, возможно, у вас есть более быстрый метод.

Я пошел от $a = 0 до $d = 0, 4 уровня циклов.

Но, может быть, можно обойтись и без повторяющихся ссылок?
 

Druidn


Рег
25 Oct, 2014

Тем
58

Постов
182

Баллов
512
  • 03, Jun 2024
  • #3
Хорошо, где я ошибаюсь (я не привык к «->» и «=>», так как не знаю, что они представляют или делают):
 
<?php
//should come back to here
function walkDOMForTagAndClass($element, $tagName, $class, $callback) {
 if ($element->nodeType !== 1) return false; // invalid element
 // we force case as XML vs. SGML are inconsistent on ths
 $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://lumtu.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',
 //'columns tablet-8 small-10 tablet-order-3 small-order-2',
 'nocrumbs',
 function($file) {
 // do whatever it is you want with the matches here.
 }
);

/*$html = "[URL='https://lumtu.com/yti/SL11LSlZodHRwczovL2JsdWVsZXR0ZXJiaWJsZS5vcmcvbGFuZy9sZXhpY29uL2xleGljb24uY2ZtP1N0cm9uZ3M9SDEmdDmED']https://www.blueletterbible.org/lang/lexicon/lexicon.cfm?Strongs=H1&t=KJV[/URL]";

$dom = new DOMDocument();
$dom->loadHTML($html);*/

//Evaluate Anchor tag in HTML
$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');

 //remove and set target attribute 
 $href->removeAttribute('target');
 $href->setAttribute("target", "_blank");

 $newURL=$url."/newurl";

 //remove and set href attribute 
 $href->removeAttribute('href');
 $href->setAttribute("href", $newURL);
}

// save html
$file=$doc->saveHTML();

echo $file;
?>
Код (разметка):
 

EROLOVE


Рег
12 Jul, 2014

Тем
77

Постов
186

Баллов
581
  • 07, Jun 2024
  • #4
Здесь могут быть опечатки или другие мелкие ошибки, они не проверялись, но должны дать вам общее представление.

Приятно то, что подпрограмму можно будет повторно использовать для совпадений, и вы можете заменить $doc (ваш DOMDocument) на любую другую переменную DOMNode, включая полученный $node из walkDOMForTagAndClass, чтобы искать внутри нее другие теги и классы.

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

Positiv1


Рег
08 Sep, 2014

Тем
73

Постов
179

Баллов
564
  • 08, Jun 2024
  • #5
Да, и прежде чем кто-нибудь вмешается, НЕТ, это не опечатка:
 
} while (
$walk = $walk->firstChild || $walk->nextSibling || (
$walk->parentNode == $element ? false : $walk->parentNode.nextSibling
)
);
Код (разметка): это =, а не ==. Тест по заданию.
 

Plsn


Рег
23 Dec, 2014

Тем
68

Постов
206

Баллов
606
  • 09, Jun 2024
  • #6
Вы никогда не определяли $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://lumtu.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://lumtu.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» и ЛОЖЬ, которая обманывает людей, которые ничего не знают, заставляя их использовать его.
 

Parkoffer


Рег
16 Jun, 2015

Тем
61

Постов
215

Баллов
540
  • 09, Jun 2024
  • #7
Честно говоря, вы занимаетесь ерундой по сопоставлению строк (в какой-то ужасающе плохой разметке) по сравнению с тем, что, вероятно, следует делать с чем-то вроде DOMDocument. DOMDocument.loadHTMLFile, затем просто используйте JS-подобный метод getElement(s)Byчто бы ни методология прохождения документа.
 

Deoronn


Рег
11 Feb, 2016

Тем
57

Постов
205

Баллов
500
  • 11, Jun 2024
  • #8
Я начал смотреть, но время закончилось.

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

 
<?php
//set_time_limit(90);

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&t=KJV' title='Русский: потерянная вещь, то, что было потеряно'><span class='Hb'>אֲבֵדָה</span> (H9)</a>, incorrectly written for <a class='nowrap' href='lexicon.cfm?strongs=H11&t=KJV' title='Английский: разрушение'><span class='Hb'>אֲבַדּוֹן</span> (H11)</a> </span>";
//'/\([H|G]{1}([0-9]+)\)/'
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://lumtu.com/yti/cwZZwcz1odHRwczovL2JsdWVsZXR0ZXJiaWJsZS5vcmcvbGFuZy9sZXhpY29uL2xleGljb24uY2ZtP1N0cm9umc0']https://www.blueletterbible.org/lang/lexicon/lexicon.cfm?Strongs=".$v[1]."&t=KJV[/URL]";
 $file = file_get_contents($file_link);
 //debug($file);

 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);
 //blbdescription isn't an array
 $all_description_blb[] = $blbdescription;
 debug('showstrongs');
 debug($showstrongs2);
 $all_etymologyStrongs = array_merge($all_etymologyStrongs, $showstrongs2);

 foreach($showstrongs2 as $b){
 $file_link2 = "[URL='https://lumtu.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://lumtu.com/yti/dk55kdGRodHRwOi8vdzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbCh52']http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/URL]">
<html xmlns="[URL='https://lumtu.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:
 

1firstlena


Рег
25 Mar, 2015

Тем
65

Постов
182

Баллов
527
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно