PHP массивы и вложенные циклы - PullRequest
0 голосов
/ 27 августа 2010

У меня есть список URL, каждая страница является определенной категорией:

http://www.site.com/category-1/page.html
http://www.site.com/category-2/page.html
http://www.site.com/category-3/page.html

На каждой странице, скажем, 4 элемента.Я хочу извлечь каждый элемент на каждой странице и присвоить ему соответствующий номер категории, т.е.

category-1_ITEM - CAT-1  
category-1_ITEM - CAT-1  
category-1_ITEM - CAT-1  
category-1_ITEM - CAT-1 

category-2_ITEM - CAT-2 
category-2_ITEM - CAT-2  
category-2_ITEM - CAT-2  
category-2_ITEM - CAT-2  

category-3_ITEM - CAT-3  
category-3_ITEM - CAT-3  
category-3_ITEM - CAT-3  
category-3_ITEM - CAT-3   

Я подумал, что это было бы довольно просто, но теперь мне приходится иметь дело с очевидными проблемами зацикливания, вот код,Ради простоты я удалил все ненужные строки:

$urls = array(
"http://www.site.com/category-1/page.html",
"http://www.site.com/category-2/page.html",
"http://www.site.com/category-3/page.html"
);

foreach ($urls as $url) {

//Load Page, find items

foreach($items as $item) {

preg_match('#http\:\/\/www\.site\.com\/(.*?)\/page\.html#is',$url,$result);

switch ($result[1]){

case "category-1": $cat = 'CAT-1'; break;
case "category-2": $cat = 'CAT-2'; break;
case "category-3": $cat = 'CAT-3'; break;
}

echo $item . ' - ' . $cat . '<br>';


}
}

Вот что он выводит:

category-1_ITEM - CAT-1  
category-1_ITEM - CAT-1  
category-1_ITEM - CAT-1  
category-1_ITEM - CAT-1 

category-1_ITEM - CAT-2  
category-1_ITEM - CAT-2  
category-1_ITEM - CAT-2 
category-1_ITEM - CAT-2 

category-2_ITEM - CAT-2  
category-2_ITEM - CAT-2  
category-2_ITEM - CAT-2 
category-2_ITEM - CAT-2 

category-1_ITEM - CAT-3  
category-1_ITEM - CAT-3  
category-1_ITEM - CAT-3
category-1_ITEM - CAT-3 

category-2_ITEM - CAT-3  
category-2_ITEM - CAT-3  
category-2_ITEM - CAT-3
category-2_ITEM - CAT-3 

category-3_ITEM - CAT-3  
category-3_ITEM - CAT-3  
category-3_ITEM - CAT-3
category-3_ITEM - CAT-3 

Есть идеи о том, что я делаю неправильно?У меня такое ощущение, что это простая ошибка, я просто ее не вижу.

Ответы [ 2 ]

1 голос
/ 27 августа 2010

Проблема в следующем коде:

//Load Page, find items

Если я могу быть настолько смелым, чтобы сделать предположение, вы, вероятно, делаете что-то вроде:

$items[] = "some content";
$items[] = "some content";

Не с константами, но ключ - это то, что вы написали перед знаком равенства.Все время вы добавляете новые элементы в конец массива, так что в первый раз вы получаете элементы с первой страницы.Во второй раз вы добавляете содержимое второй страницы, и у вас есть оба из них в массиве.Другими словами: вы забыли сбросить $ items.Добавьте $items = array() в начале //Load page, find items и все будет в порядке.

Если вы переходите с другого языка, возможно, проблему лучше объяснить в более технических терминах: в коде php блоки не создаютсяновая сфераВ основном только функции.

0 голосов
/ 27 августа 2010

Редактировать: я считаю, что ваша проблема в том, что вы не очищаете массив $ items каждый раз, когда выполняете цикл. Я тестировал следующий код:

$urls = array(
"http://www.site.com/category-1/page.html",
"http://www.site.com/category-2/page.html",
"http://www.site.com/category-3/page.html"
);

$id = 0;

foreach ($urls as $url) {

$items = array(
"i" . $id++,
"i" . $id++,
"i" . $id++
);


foreach($items as $item) {

preg_match('#http://www.site.com/(.*?)/page.html#is',$url,$result);

switch ($result[1]){

case "category-1": $cat = 'CAT-1'; break;
case "category-2": $cat = 'CAT-2'; break;
case "category-3": $cat = 'CAT-3'; break;
}

echo $item . ' - ' . $cat . '<br>';


}
echo "<br/>";
}

и я получаю следующий вывод:

i0 - CAT-1
i1 - CAT-1
i2 - CAT-1

i3 - CAT-2
i4 - CAT-2
i5 - CAT-2

i6 - CAT-3
i7 - CAT-3
i8 - CAT-3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...