如何在PHP7上使用foreach在for上迭代产品以获取特定的DOM元素
我真的不知道发生了什么,因为我不能迭代这个数据对象。问题是我总是打印同一个对象,但是如果我打印一个单独的值,它就在那里 每个产品都有一个隐藏的输入,我正在使用如何在PHP7上使用foreach在for上迭代产品以获取特定的DOM元素,php,for-loop,foreach,domdocument,Php,For Loop,Foreach,Domdocument,我真的不知道发生了什么,因为我不能迭代这个数据对象。问题是我总是打印同一个对象,但是如果我打印一个单独的值,它就在那里 每个产品都有一个隐藏的输入,我正在使用DomDocumentPHP库阅读它 <input class="productName" id="03MJRUXE" type="hidden" value="Camisa Polo Masculina Flamê"> <input class="productId" id="03MJRUXE" type="hidden
DomDocument
PHP库阅读它
<input class="productName" id="03MJRUXE" type="hidden" value="Camisa Polo Masculina Flamê">
<input class="productId" id="03MJRUXE" type="hidden" value="03MJRUXE">
<input class="productPrice" id="03MJRUXE" type="hidden" value="69.99">
<input class="productCategory" id="03MJRUXE" type="hidden" value="Polos">
<input class="productBrand" id="03MJRUXE" type="hidden" value="Business">
我将在下面提供一个屏幕截图:
我迭代这些元素的函数如下:
/**
* Extract info of the inputs.
*
* @param DOMNodeList $elements
* @param DOMNodeList $qtdeProducts
* @return array
*/
private function extractInfoByInputs($elements, $qtdeProducts)
{
$productInputs = [];
$arrKeysList = [
'productName',
'productId',
'productPrice',
'productCategory',
'productBrand'
];
for ($i = 0; $i < $qtdeProducts->length; $i++) {
/**
* @var int $k
* @var DOMElement $element
*/
$arrProducts = [];
$loop = 0;
foreach ($elements as $k => $element) {
$class = $element->getAttribute('class');
if (!in_array($class, $arrKeysList)) {
unset($elements[$k]);
} else {
print_r($element);
if ($loop >= sizeof($arrKeysList))
continue;
$class = $element->getAttribute('class');
$value = $element->getAttribute('value');
$arrProducts[$loop] = [$class => $value];
$loop++;
/*foreach ($arrKeysList as $y => $kItem) {
if ($class === $kItem) {
$arrData[$y] = [$class => $value];
$arrProducts[$loop] = $arrData[$y];
}
}*/
//$productInputs[$i] = $arrProducts;
//$loop++;
}
}
$productInputs[$i] = $arrProducts;
}
print_r($productInputs);
return $productInputs;
}
Array
(
[0] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[1] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[2] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[3] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
/**
* Extract info of the inputs.
*
* @param DOMNodeList $elements
* @return array
*/
private function extractInfoByInputs($elements)
{
$arrKeysList = [
'productName',
'productId',
'productPrice',
'productCategory',
'productBrand'
];
$arrayElements = [];
for ($i = 0; $i < $elements->length; $i++) {
$item = $elements->item($i);
$class = $item->getAttribute('class');
if (in_array($class, $arrKeysList))
$arrayElements[] = $item;
}
$arrayAttrs = [];
foreach ($arrKeysList as $y => $kItem) {
$loop = 0;
/**
* @var int $k
* @var DOMElement $element
*/
foreach ($arrayElements as $k => $element) {
$class = $element->getAttribute('class');
$value = $element->getAttribute('value');
if ($class === $kItem) {
$arrayAttrs[$loop][$y] = [$class => $value];
$loop++;
}
}
}
print_r($arrayAttrs);
return $arrayAttrs;
}
Array
(
[0] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[1] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Listrada
)
[1] => Array
(
[productId] => 03XZAMSE
)
[2] => Array
(
[productPrice] => 59.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[2] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Tie Dye
)
[1] => Array
(
[productId] => 03TBNCME
)
[2] => Array
(
[productPrice] => 99.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
etc...
Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
[productId] => 03MJRUXE
[productPrice] => 69.99
[productCategory] => Polos
[productBrand] => Business
)
[1] => Array
(
[productName] => Camisa Polo Masculina Listrada
[productId] => 03XZAMSE
[productPrice] => 59.99
[productCategory] => Polos
[productBrand] => Business
)
[2] => Array
(
[productName] => Camisa Polo Masculina Tie Dye
[productId] => 03TBNCME
[productPrice] => 99.99
[productCategory] => Polos
[productBrand] => Business
)
[3] => Array
(
[productName] => Camisa Masculina Slim
[productId] => H2EUSE01E
[productPrice] => 119.99
[productCategory] => Camisas
[productBrand] => Business
)
[4] => Array
(
[productName] => Camiseta Masculina Alongada
[productId] => 4E6QWBDE
[productPrice] => 49.99
[productCategory] => Camisetas
[productBrand] => Business
)
[5] => ...
更新
我更新了PHP代码,还设置了一个屏幕截图
拜托,有人能帮我吗?我解决了这个问题 有时候,抹去一切,重新开始是件好事
- 首先,我使用for循环将DOMNodeList转换为domeElement数组
- 其次,我创建一个属性名称列表的foreach循环和其他转换元素的foreach循环
/**
* Extract info of the inputs.
*
* @param DOMNodeList $elements
* @param DOMNodeList $qtdeProducts
* @return array
*/
private function extractInfoByInputs($elements, $qtdeProducts)
{
$productInputs = [];
$arrKeysList = [
'productName',
'productId',
'productPrice',
'productCategory',
'productBrand'
];
for ($i = 0; $i < $qtdeProducts->length; $i++) {
/**
* @var int $k
* @var DOMElement $element
*/
$arrProducts = [];
$loop = 0;
foreach ($elements as $k => $element) {
$class = $element->getAttribute('class');
if (!in_array($class, $arrKeysList)) {
unset($elements[$k]);
} else {
print_r($element);
if ($loop >= sizeof($arrKeysList))
continue;
$class = $element->getAttribute('class');
$value = $element->getAttribute('value');
$arrProducts[$loop] = [$class => $value];
$loop++;
/*foreach ($arrKeysList as $y => $kItem) {
if ($class === $kItem) {
$arrData[$y] = [$class => $value];
$arrProducts[$loop] = $arrData[$y];
}
}*/
//$productInputs[$i] = $arrProducts;
//$loop++;
}
}
$productInputs[$i] = $arrProducts;
}
print_r($productInputs);
return $productInputs;
}
Array
(
[0] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[1] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[2] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[3] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
/**
* Extract info of the inputs.
*
* @param DOMNodeList $elements
* @return array
*/
private function extractInfoByInputs($elements)
{
$arrKeysList = [
'productName',
'productId',
'productPrice',
'productCategory',
'productBrand'
];
$arrayElements = [];
for ($i = 0; $i < $elements->length; $i++) {
$item = $elements->item($i);
$class = $item->getAttribute('class');
if (in_array($class, $arrKeysList))
$arrayElements[] = $item;
}
$arrayAttrs = [];
foreach ($arrKeysList as $y => $kItem) {
$loop = 0;
/**
* @var int $k
* @var DOMElement $element
*/
foreach ($arrayElements as $k => $element) {
$class = $element->getAttribute('class');
$value = $element->getAttribute('value');
if ($class === $kItem) {
$arrayAttrs[$loop][$y] = [$class => $value];
$loop++;
}
}
}
print_r($arrayAttrs);
return $arrayAttrs;
}
Array
(
[0] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[1] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Listrada
)
[1] => Array
(
[productId] => 03XZAMSE
)
[2] => Array
(
[productPrice] => 59.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[2] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Tie Dye
)
[1] => Array
(
[productId] => 03TBNCME
)
[2] => Array
(
[productPrice] => 99.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
etc...
Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
[productId] => 03MJRUXE
[productPrice] => 69.99
[productCategory] => Polos
[productBrand] => Business
)
[1] => Array
(
[productName] => Camisa Polo Masculina Listrada
[productId] => 03XZAMSE
[productPrice] => 59.99
[productCategory] => Polos
[productBrand] => Business
)
[2] => Array
(
[productName] => Camisa Polo Masculina Tie Dye
[productId] => 03TBNCME
[productPrice] => 99.99
[productCategory] => Polos
[productBrand] => Business
)
[3] => Array
(
[productName] => Camisa Masculina Slim
[productId] => H2EUSE01E
[productPrice] => 119.99
[productCategory] => Camisas
[productBrand] => Business
)
[4] => Array
(
[productName] => Camiseta Masculina Alongada
[productId] => 4E6QWBDE
[productPrice] => 49.99
[productCategory] => Camisetas
[productBrand] => Business
)
[5] => ...
关于那些钥匙的一个观察
外循环中有许多键
实际上,它是按键分组的,但最好按输入名称/类和值分组
所以,稍微修改一下
- 之前:
$arrayAttrs[$loop][$y]=[$class=>$value]代码>
- 现在:
$arrayAttrs[$loop][$class]=$value代码>
/**
* Extract info of the inputs.
*
* @param DOMNodeList $elements
* @param DOMNodeList $qtdeProducts
* @return array
*/
private function extractInfoByInputs($elements, $qtdeProducts)
{
$productInputs = [];
$arrKeysList = [
'productName',
'productId',
'productPrice',
'productCategory',
'productBrand'
];
for ($i = 0; $i < $qtdeProducts->length; $i++) {
/**
* @var int $k
* @var DOMElement $element
*/
$arrProducts = [];
$loop = 0;
foreach ($elements as $k => $element) {
$class = $element->getAttribute('class');
if (!in_array($class, $arrKeysList)) {
unset($elements[$k]);
} else {
print_r($element);
if ($loop >= sizeof($arrKeysList))
continue;
$class = $element->getAttribute('class');
$value = $element->getAttribute('value');
$arrProducts[$loop] = [$class => $value];
$loop++;
/*foreach ($arrKeysList as $y => $kItem) {
if ($class === $kItem) {
$arrData[$y] = [$class => $value];
$arrProducts[$loop] = $arrData[$y];
}
}*/
//$productInputs[$i] = $arrProducts;
//$loop++;
}
}
$productInputs[$i] = $arrProducts;
}
print_r($productInputs);
return $productInputs;
}
Array
(
[0] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[1] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[2] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[3] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
/**
* Extract info of the inputs.
*
* @param DOMNodeList $elements
* @return array
*/
private function extractInfoByInputs($elements)
{
$arrKeysList = [
'productName',
'productId',
'productPrice',
'productCategory',
'productBrand'
];
$arrayElements = [];
for ($i = 0; $i < $elements->length; $i++) {
$item = $elements->item($i);
$class = $item->getAttribute('class');
if (in_array($class, $arrKeysList))
$arrayElements[] = $item;
}
$arrayAttrs = [];
foreach ($arrKeysList as $y => $kItem) {
$loop = 0;
/**
* @var int $k
* @var DOMElement $element
*/
foreach ($arrayElements as $k => $element) {
$class = $element->getAttribute('class');
$value = $element->getAttribute('value');
if ($class === $kItem) {
$arrayAttrs[$loop][$y] = [$class => $value];
$loop++;
}
}
}
print_r($arrayAttrs);
return $arrayAttrs;
}
Array
(
[0] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
)
[1] => Array
(
[productId] => 03MJRUXE
)
[2] => Array
(
[productPrice] => 69.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[1] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Listrada
)
[1] => Array
(
[productId] => 03XZAMSE
)
[2] => Array
(
[productPrice] => 59.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
[2] => Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Tie Dye
)
[1] => Array
(
[productId] => 03TBNCME
)
[2] => Array
(
[productPrice] => 99.99
)
[3] => Array
(
[productCategory] => Polos
)
[4] => Array
(
[productBrand] => Business
)
)
etc...
Array
(
[0] => Array
(
[productName] => Camisa Polo Masculina Flamê
[productId] => 03MJRUXE
[productPrice] => 69.99
[productCategory] => Polos
[productBrand] => Business
)
[1] => Array
(
[productName] => Camisa Polo Masculina Listrada
[productId] => 03XZAMSE
[productPrice] => 59.99
[productCategory] => Polos
[productBrand] => Business
)
[2] => Array
(
[productName] => Camisa Polo Masculina Tie Dye
[productId] => 03TBNCME
[productPrice] => 99.99
[productCategory] => Polos
[productBrand] => Business
)
[3] => Array
(
[productName] => Camisa Masculina Slim
[productId] => H2EUSE01E
[productPrice] => 119.99
[productCategory] => Camisas
[productBrand] => Business
)
[4] => Array
(
[productName] => Camiseta Masculina Alongada
[productId] => 4E6QWBDE
[productPrice] => 49.99
[productCategory] => Camisetas
[productBrand] => Business
)
[5] => ...
我希望通过解决这个问题来帮助其他人。显示更多的html文件(特别是显示几个带有父节点的产品);还有什么是正确的输出我现在就更新代码。谢谢你关心帮助我。