【发布时间】:2018-01-13 23:02:05
【问题描述】:
这是我的脚本及其背后的逻辑
////There's some more stuff right here but it's not really relevant. Right now
////Because I'm doing tests i'm doing I'm limiting it to 3 posts in `$my_query`
//create empty arrays before loop to initialize array
$array = array();
//start loop (each contains a my way of getting a new url)
while ($my_query->have_posts()) : $my_query->the_post();
//misc stuff to get the URL, SKU and ID
$post_id = get_the_ID();
$product = wc_get_product(get_the_ID());
$title = $product->get_title();
$sku = $product->get_sku();
$sku_id = $sku . '_' . $post_id;
$urltitle = urlencode($title);
//assign url
$url = 'http://www.example.com/search?=' . $urltitle;
//Using CURL to get HTML from $url
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, surl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$html = curl_exec($ch);
curl_close($ch);
$dom = new DOMDocument();
@$dom->loadHTML($html);
//retreive links from loaded html
foreach($dom->getElementsByTagName('a') as $link) {
//search nodeValue's for something specific in string
if (strpos($link->nodeValue, 'Over $') !== false) {
//nodeValue found. Start counter and make $f not empty
$f = 1;
}
//$f is now not empty
if (!empty($f)) {
//Starting at nodeValue's immediately after 'Over $'
if ($f > 1) {
//Put nodeValue's in $array along with corresponding $sku and $id
$array[] .= $link->nodeValue . '|' . $sku_id;
}
//increment $f by +1 once $f is not empty
$f++;
}
//we only want the first 4 values after the searched text was found ($f = 2, 3, 4 and 5)
if ($f == 6) {
break;
}
//end foreach loop
}
//make $f empty again so it remains false at beginning of while loop (don't completely understand this but I was having issues without it)
$f = NULL;
//end loop. Start again.
endwhile;
在循环之后,数组存储了我获得的值并输出正常。
Array
(
[0] => Motor Vehicle Wheel Parts|SKU1_9545
[1] => Motor Vehicle Suspension Parts|SKU1_9545
[2] => CarParts.com|SKU1_9545
[3] => Auto Parts Train|SKU1_9545
[4] => Automotive Rims & Wheels|SKU2_8564
[5] => Motor Vehicle Suspension Parts|SKU2_8564
[6] => Under 16 inch|SKU2_8564
[7] => 16 – 18 inch|SKU2_8564
[8] => Motor Vehicle Wheel Parts|SKU3_7589
[9] => Motor Vehicle Suspension Parts|SKU3_7589
[10] => McGard|SKU3_7589
[11] => Rugged Ridge|SKU3_7589
)
因为我在两边都有重复的键和值,所以我需要把它做成一个多维数组,以 $sku_id 作为父数组。
这是我收集的:
foreach ($array as $key => $level):
$explode = explode('|', $level);
foreach ($itemprods as $k =>$attribute):
$explode = explode('|', $attribute);
$variables[$explode[1]][] = $explode[0];
endforeach;
endforeach;
这似乎有点工作,因为$variables 的输出是
Array
(
[SKU1_9545] => Array
(
[0] => Motor Vehicle Wheel Parts
[1] => Motor Vehicle Suspension Parts
[2] => CarParts.com
[3] => Auto Parts Train
[4] => Motor Vehicle Wheel Parts
[5] => Motor Vehicle Suspension Parts
[6] => CarParts.com
[7] => Auto Parts Train
[8] => Motor Vehicle Wheel Parts
[9] => Motor Vehicle Suspension Parts
[10] => CarParts.com
[11] => Auto Parts Train
[12] => Motor Vehicle Wheel Parts
[13] => Motor Vehicle Suspension Parts
[14] => CarParts.com
[15] => Auto Parts Train
[16] => Motor Vehicle Wheel Parts
[17] => Motor Vehicle Suspension Parts
[18] => CarParts.com
[19] => Auto Parts Train
[20] => Motor Vehicle Wheel Parts
[21] => Motor Vehicle Suspension Parts
[22] => CarParts.com
[23] => Auto Parts Train
[24] => Motor Vehicle Wheel Parts
[25] => Motor Vehicle Suspension Parts
[26] => CarParts.com
[27] => Auto Parts Train
[28] => Motor Vehicle Wheel Parts
[29] => Motor Vehicle Suspension Parts
[30] => CarParts.com
[31] => Auto Parts Train
[32] => Motor Vehicle Wheel Parts
[33] => Motor Vehicle Suspension Parts
[34] => CarParts.com
[35] => Auto Parts Train
[36] => Motor Vehicle Wheel Parts
[37] => Motor Vehicle Suspension Parts
[38] => CarParts.com
[39] => Auto Parts Train
[40] => Motor Vehicle Wheel Parts
[41] => Motor Vehicle Suspension Parts
[42] => CarParts.com
[43] => Auto Parts Train
[44] => Motor Vehicle Wheel Parts
[45] => Motor Vehicle Suspension Parts
[46] => CarParts.com
[47] => Auto Parts Train
)
[SKU2_8564] => Array
(
[0] => Automotive Rims & Wheels
[1] => Motor Vehicle Suspension Parts
[2] => Under 16 inch
[3] => 16 – 18 inch
[4] => Automotive Rims & Wheels
[5] => Motor Vehicle Suspension Parts
[6] => Under 16 inch
[7] => 16 – 18 inch
[8] => Automotive Rims & Wheels
[9] => Motor Vehicle Suspension Parts
[10] => Under 16 inch
[11] => 16 – 18 inch
[12] => Automotive Rims & Wheels
[13] => Motor Vehicle Suspension Parts
[14] => Under 16 inch
[15] => 16 – 18 inch
[16] => Automotive Rims & Wheels
[17] => Motor Vehicle Suspension Parts
[18] => Under 16 inch
[19] => 16 – 18 inch
[20] => Automotive Rims & Wheels
[21] => Motor Vehicle Suspension Parts
[22] => Under 16 inch
[23] => 16 – 18 inch
[24] => Automotive Rims & Wheels
[25] => Motor Vehicle Suspension Parts
[26] => Under 16 inch
[27] => 16 – 18 inch
[28] => Automotive Rims & Wheels
[29] => Motor Vehicle Suspension Parts
[30] => Under 16 inch
[31] => 16 – 18 inch
[32] => Automotive Rims & Wheels
[33] => Motor Vehicle Suspension Parts
[34] => Under 16 inch
[35] => 16 – 18 inch
[36] => Automotive Rims & Wheels
[37] => Motor Vehicle Suspension Parts
[38] => Under 16 inch
[39] => 16 – 18 inch
[40] => Automotive Rims & Wheels
[41] => Motor Vehicle Suspension Parts
[42] => Under 16 inch
[43] => 16 – 18 inch
[44] => Automotive Rims & Wheels
[45] => Motor Vehicle Suspension Parts
[46] => Under 16 inch
[47] => 16 – 18 inch
)
[SKU3_7589] => Array
(
[0] => Motor Vehicle Wheel Parts
[1] => Motor Vehicle Suspension Parts
[2] => McGard
[3] => Rugged Ridge
[4] => Motor Vehicle Wheel Parts
[5] => Motor Vehicle Suspension Parts
[6] => McGard
[7] => Rugged Ridge
[8] => Motor Vehicle Wheel Parts
[9] => Motor Vehicle Suspension Parts
[10] => McGard
[11] => Rugged Ridge
[12] => Motor Vehicle Wheel Parts
[13] => Motor Vehicle Suspension Parts
[14] => McGard
[15] => Rugged Ridge
[16] => Motor Vehicle Wheel Parts
[17] => Motor Vehicle Suspension Parts
[18] => McGard
[19] => Rugged Ridge
[20] => Motor Vehicle Wheel Parts
[21] => Motor Vehicle Suspension Parts
[22] => McGard
[23] => Rugged Ridge
[24] => Motor Vehicle Wheel Parts
[25] => Motor Vehicle Suspension Parts
[26] => McGard
[27] => Rugged Ridge
[28] => Motor Vehicle Wheel Parts
[29] => Motor Vehicle Suspension Parts
[30] => McGard
[31] => Rugged Ridge
[32] => Motor Vehicle Wheel Parts
[33] => Motor Vehicle Suspension Parts
[34] => McGard
[35] => Rugged Ridge
[36] => Motor Vehicle Wheel Parts
[37] => Motor Vehicle Suspension Parts
[38] => McGard
[39] => Rugged Ridge
[40] => Motor Vehicle Wheel Parts
[41] => Motor Vehicle Suspension Parts
[42] => McGard
[43] => Rugged Ridge
[44] => Motor Vehicle Wheel Parts
[45] => Motor Vehicle Suspension Parts
[46] => McGard
[47] => Rugged Ridge
)
)
有没有更有效的方法来做到这一点? 多维数组中的所有值都是正确的,我只需要想办法去除每个维度中的重复值。
我希望达到的最终结果是这样的
Array
(
[SKU1_9545] => Array
(
[0] => Motor Vehicle Wheel Parts
[1] => Motor Vehicle Suspension Parts
[2] => CarParts.com
[3] => Auto Parts Train
)
[SKU2_8564] => Array
(
[0] => Automotive Rims & Wheels
[1] => Motor Vehicle Suspension Parts
[2] => Under 16 inch
[3] => 16 – 18 inch
)
[SKU3_7589] => Array
(
[0] => Motor Vehicle Wheel Parts
[1] => Motor Vehicle Suspension Parts
[2] => McGard
[3] => Rugged Ridge
)
)
【问题讨论】:
-
您可以在它们上使用
array_unique,也可以在添加它们之前使用array_search。
标签: php arrays curl domdocument