Соответствие nodeValue с переключателем - PullRequest
0 голосов
/ 08 ноября 2018

У меня возникли проблемы с сопоставлением nodeValue, равным $property и $value.это на самом деле должно идти гладко, но я где-то ошибаюсь.Я не мог понять фигуру.

foreach ($links as $getContent){
        $getContentData = pageContent($getContent);
        $getRouteData = new \DOMXPath($getContentData);

        $sendtoDatabase = [
            'region' => '関西',
            'photo' => $images,
            'building_name' => '',
            'price' => '',
            'old_price' => '',
            'extend' => '',
            'address' => '',
            'total_house' => '',
            'rooms' => '',
            'cons_finish' => '',
            'entry' => '',
            'balcony' => '',
            'company_name' => '',
            'date_update' => '毎週月曜日更新',
        ];


        $tableth = $getRouteData->query("//table[@class='outline']/tr/th");
            foreach ($tableth as $getth){
                $property[] = trim($getth->nodeValue);
            }


        $tabletd = $getRouteData->query("//table[@class='outline']/tr/td");
            foreach ($tabletd as $gettd){
                $value[] = trim($gettd->nodeValue);
            }

            switch ($property) {
                case '物件名':
                    $sendtoDatabase['building_name'] = $value;
                    break;
                case '販売価格':
                    $sendtoDatabase['price'] = $value;
                    break;
                case '専有床面積':
                    $sendtoDatabase['extend'] = $value;
                    break;
                case '所在地':
                    $sendtoDatabase['address'] = $value;
                    break;
                case '総戸数':
                    $sendtoDatabase['total_house'] = $value;
                    break;
                case '間取り':
                    $sendtoDatabase['rooms'] = $value;
                    break;
                case '竣工日':
                    $sendtoDatabase['cons_finish'] = $value;
                    break;
                case '管理形態':
                    $sendtoDatabase['company_name'] = $value;
                    break;
                case '入居開始日':
                    $sendtoDatabase['entry'] = $value;
                    break;
                case 'バルコニー面積':
                    $sendtoDatabase['balcony'] = $value;
                    break;
                default:
                    break;
            }
} 

Данные содержатся в $property и $value.Никаких проблем с этим я проверил.Просто не могу передать его switch case для соответствия.Любая идея, почему это происходит.

1 Ответ

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

Я бы посоветовал вам сделать еще одну пустую переменную $new_variable = []; (это определит переменную $ new_variable в качестве массива. Вы также можете сделать это следующим образом $new_variable = array();) перед первым foreach циклом (в начале вашего кода вы разместили здесь).

После того, как switch заполните $new_variable вот так (плохо приведу пример:

switch ($property) {
            case '物件名':
                $sendtoDatabase['building_name'] = $value;
                break;
            case '販売価格':
                $sendtoDatabase['price'] = $value;
                break;
            case '専有床面積':
                $sendtoDatabase['extend'] = $value;
                break;
            case '所在地':
                $sendtoDatabase['address'] = $value;
                break;
            case '総戸数':
                $sendtoDatabase['total_house'] = $value;
                break;
            case '間取り':
                $sendtoDatabase['rooms'] = $value;
                break;
            case '竣工日':
                $sendtoDatabase['cons_finish'] = $value;
                break;
            case '管理形態':
                $sendtoDatabase['company_name'] = $value;
                break;
            case '入居開始日':
                $sendtoDatabase['entry'] = $value;
                break;
            case 'バルコニー面積':
                $sendtoDatabase['balcony'] = $value;
                break;
            default:
                break;
        }

  //right here BEFORE you close the foreach loop fill $new_variable 
 //with the new value like this
$new_variable[] = $sendtoDatabase;//the '[]' brackets means that each 
//$sendtoDatabase will be inserted into $new_variable[0], then 
//$new_variable[1], and so on untill the last foreach loop

теперь ПОСЛЕ окончания foreach() сделайте кусок кода, подобный этому

foreach($new_variable as $value){
   //add each $value into the database. this will take each looped foreach and 
  //switch you used before and add them one by one to the database
}

Надеюсь, это поможет, если у вас возникнут другие вопросы, просто задайте: D Я постараюсь помочь, насколько смогу!

...