Создание многомерного массив в цикле foreach, смещение массива в цикле
В результате парсинга, сохраняю данные в многомерный массив.
foreach ($html->find('div.pc-product-loop__col') as $page) {
$title = $page->find('div.product-loop-title');
$data['title'] = reset($title)->plaintext;
$description = $page->find('div.product-cut__extra-info');
$data['description'] = reset($description)->plaintext;
foreach ($page->find('div.attributes-list__row') as $featureItem) {
$featureName = $featureItem->find('div.attributes-list__name');
$feature[] = reset($featureName)->plaintext;
$featureValue = $featureItem->find('div.attributes-list__value');
$feature[] = reset($featureValue)->plaintext;
$data['feature'] = $feature;
}
$product[] = $data;
}
echo '<pre>';
var_dump($product);
В результате чего получаю многомерный массив, но проблема в том что на втором уровне массива с каждым циклом значения дублируются.
`array (size=8)
0 =>
array (size=5)
'title' => string 'Надувная лодка Aqua-Storm Mini – Зеленый' (length=66)
'description' => string 'Гребная лодка ПВХ
'feature' =>
array (size=10)
0 => string 'Тип судна' (length=21)
1 => string 'гребная лодка ПВХ ' (length=43)
2 => string 'Количество мест' (length=33)
3 => string 'одноместная лодка' (length=44)
4 => string 'Грузоподъемность лодки, кг ' (length=52)
5 => string '60' (length=13)
6 => string 'Вес лодки, кг ' (length=26)
7 => string '3' (length=12)
8 => string 'Диаметр баллона лодки, см ' (length=48)
9 => string '21' (length=13)
1 =>
array (size=5)
'title' => string 'Надувная лодка Kolibri K-190X' (length=42)
'description' => string 'Гребная лодка ПВХ
'feature' =>
array (size=20)
0 => string 'Тип судна' (length=21)
1 => string 'гребная лодка ПВХ' (length=43)
2 => string 'Количество мест' (length=33)
3 => string 'одноместная лодка' (length=44)
4 => string 'Грузоподъемность лодки, кг' (length=52)
5 => string '60' (length=13)
6 => string 'Вес лодки, кг' (length=26)
7 => string '3' (length=12)
8 => string 'Диаметр баллона лодки, см' (length=48)
9 => string '21' (length=13)
10 => string 'Тип судна' (length=21)
11 => string 'гребная лодка ПВХ' (length=43)
12 => string 'Количество мест' (length=33)
13 => string 'одноместная лодка' (length=44)
14 => string 'Грузоподъемность лодки, кг' (length=52)
15 => string '100' (length=14)
16 => string 'Вес лодки, кг' (length=26)
17 => string '6.6' (length=14)
18 => string 'Диаметр баллона лодки, см' (length=48)
19 => string '28' (length=13)
2 =>
array (size=5)
'title' => string 'Надувная лодка Kolibri K-210Х' (length=43)
'description' => string 'Гребная лодка ПВХ
'feature' =>
array (size=30)
0 => string 'Тип судна' (length=21)
1 => string 'гребная лодка ПВХ ' (length=43)
2 => string 'Количество мест' (length=33)
3 => string 'одноместная лодка' (length=44)
4 => string 'Грузоподъемность лодки, кг' (length=52)
5 => string '60' (length=13)
6 => string 'Вес лодки, кг' (length=26)
7 => string '3' (length=12)
8 => string 'Диаметр баллона лодки, см' (length=48)
9 => string '21' (length=13)
10 => string 'Тип судна' (length=21)
11 => string 'гребная лодка ПВХ' (length=43)
12 => string 'Количество мест' (length=33)
13 => string 'одноместная лодка' (length=44)
14 => string 'Грузоподъемность лодки, кг' (length=52)
15 => string '100' (length=14)
16 => string 'Вес лодки, кг' (length=26)
17 => string '6.6' (length=14)
18 => string 'Диаметр баллона лодки, см' (length=48)
19 => string '28' (length=13)
20 => string 'Тип судна' (length=21)
21 => string 'гребная лодка ПВХ' (length=43)
22 => string 'Количество мест' (length=33)
23 => string 'одноместная лодка' (length=44)
24 => string 'Грузоподъемность лодки, кг' (length=52)
25 => string '110' (length=14)
26 => string 'Вес лодки, кг' (length=26)
27 => string '7' (length=12)
28 => string 'Диаметр баллона лодки, см' (length=48)
29 => string '28' (length=13)`
И так далее по нарастающей. Не могу разобраться, гугл не помог :( Как исправить и что посоветуете???
Ответы (1 шт):
Автор решения: teran
→ Ссылка
Хоть и голосовал за закрытие вопроса, оставлю ответ с корректировками синтаксиса относительно reset.
Ошибка ваша, очевидно, в том, что вы постоянно добавляете данные в массив, не обнуляя его в цикле по $page.
foreach ($html->find('div.pc-product-loop__col') as $page) {
$title = $page->find('div.product-loop-title', 0);
$description = $page->find('div.product-cut__extra-info', 0);
$features = [];
foreach ($page->find('div.attributes-list__row') as $item) {
$name = $item->find('div.attributes-list__name', 0);
$value = $item->find('div.attributes-list__value', 0);
$features[] = [
'name' => $name->plaintext,
'value' => $value->plaintext,
];
}
$products[] = [
'title' => $title->plaintext,
'description' => $description->plaintext,
'features' => $features
];
}