У меня есть <ul> с некоторыми <li> (s). Я хочу подсчитать количество этих <li> s на стороне сервера. И если это число соответствует заданному условию, я хотел бы добавить к этому <ul> еще несколько элементов <li>. Может кто-нибудь, пожалуйста, помогите мне с этим?
Используйте библиотеку DOM PHP или посмотрите Simple DOM Parser . У них обоих есть все необходимое для манипулирования и поиска HTML в зависимости от вашего вопроса
Сначала простой пример с использованием модуля DOM php и XPath
$s = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html><head><title>...</title></head><body> <ul> <li>1</li><li>2</li> </ul> <ul> <li>1</li><li>2</li><li>3</li> </ul> <ul> <li>x</li><li>y</li> </ul> </body></html>'; $doc = new DOMDocument; $doc->loadhtml($s); $xpath = new DOMXPath($doc); foreach( $xpath->query('//ul[ count(li)<3 ]') as $ul ) { $li = $doc->createElement('li', 'abc...xyz'); $ul->appendChild($li); } echo $doc->savehtml();
а затем упрощенным примером того, что я имел в виду под «И эта функция не может включать дополнительные данные?»
echo firstFunction(array('a'), 'secondFunction'); function firstFunction($arrData, $fnFill=null) { $rv = ''; $counter = 0; foreach($arrData as $e) { $counter += 1; $rv .= '<li>'.htmlspecialchars($e).'</li>'; } if ( 4 > $counter && !is_null($fnFill)) { // oh no. Not enough elements. Let's call $fnFill(), it provides some filler material $rv .= $fnFill(); } return $rv; } // providing extra li elements function secondFunction() { return '<li>x</li><li>y</li><li>z</li>'; }