Простой скрипт веб-скриптинга на PHP не работает - PullRequest
0 голосов
/ 08 ноября 2011

Я очень плохо знаком с программированием и бьюсь головой об стену, пытаясь сделать этот веб-скребок уже 2 дня.Я упростил полный сценарий (даже удалив весь фактический просмотр веб-страниц), сохранив при этом исходную дисфункцию.

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

  1. Заполнить массив вложенными массивами
  2. Установить некоторые значения в каждом вложенном массиве, но оставить последнее значение вложенного массива пустым
  3. a) Получите последние значения подмассива с помощью другой функции, 3. b), а затем вставьте их в исходный массив

3.b, где сценарий завершается ошибкой.Значение не вводится (оно оставлено пустым).

Я знаю, что использую функции без параметров (полный код включает их), что может быть плохо, но дисфункция остается без них.

<?php
    $scrape = new Scraper();

    class Scraper
    {
        protected $cars = array();

        function __construct()
        {
            $this->getcars();

            foreach ($this->cars as $item) {
                $item['color'] = $this->getcolor($item); // here is the fault!
            }
        }

        private function getcars()
        {
            $listofcars = array('0','1','2');
            foreach ($listofcars as $item) {
                $this->cars[] = array('carname' => 'humvee','color' => '');
            }
        }

        private function getcolor()
        {
            return 'green';
        }
    }
?>

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

Ваш цикл foreach не передается по ссылке (любые внесенные вами изменения не будут "зависать"). Измените его на:

foreach ($this->cars as &$item)

Редактировать: Похоже, что $this->getcolor($item); может быть проблемой. Функция getcolor(), которую вы определили, не принимает параметры, поэтому вы можете сделать это $this->getcolor();

0 голосов
/ 08 ноября 2011

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

<?php
    function __construct() {
        $this->cars = $this->getcars();
        foreach ($this->cars as $item) {
            $item['color'] = $this->getcolor($item);
        }
    }

    private function getcars() {
        $data = array();
        $listofcars = array('0','1','2');
        foreach ($listofcars as $item) {
            $data[] = array('carname' => 'humvee','color' => '');
        }
        return $data;
    }

    private function getcolor() {
        return 'green';
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...