Вложенный оператор foreach & if, пытающийся отобразить значение массива, сбивает с толку - PullRequest
0 голосов
/ 24 апреля 2011

Я пытаюсь сравнить 2 значения из 2 массивов, 1 массив из файла XML, а один - глобальный массив.

Я не знаю точных сумм, и они со временем меняются, но, например,

Массив XML имеет 100 значений.
Глобальный массив имеет 5 значений.

Сравнение приведено для простой текстовой строки, если они соответствуют эхо "совпадение", если не соответствует эхо "нет совпадение".

Проблема в том, что я не могу понять, как отобразить правильные значения без циклического прохождения через foreach, вместо того, чтобы просто печатать «без совпадений», как только оно будет повторяться 500 раз.

Я на самом деле хочу, чтобы вывод соответствовал глобальному значению массива, поэтому в этом случае эхо "no match" 5 раз.

Возможно, это что-то очень неправильное в моем подходе, так как я только учусь.

$xml_string = simplexml_load_string($xml_body);

  // parse  XML feed 

    foreach ($xml_string->xpath('//plugin') as $character) {

        $xml_plugin_name = $character->name;

        $compare_value_remote = $xml_plugin_name;


   //grab the values we want from the global array     

        foreach ( $plugins as $key => $value ) {

         foreach ($value as $pkey){

          $plugin_name = $pkey["Name"];

          $compare_value_local =  $plugin_name;

    //compare them

             if( $compare_value_remote == $compare_value_local){

              echo "match";

             }else{

              echo "no match";

             }
           }             
       }
    }

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Решение Ragnar123 выглядит хорошо, только одна ошибка заставляет вас напечатать «Совпадение найдено», даже если совпадений нет

if (count($matches > 0)) 

должно быть

if (count($matches) > 0) 

потому что count (логическое) вернет (int) 1, так что вы всегда будете передавать if

1 голос
/ 24 апреля 2011

Если я вас правильно понял, вы хотите узнать, есть ли совпадение.

Попробуйте посмотреть этот код

<?php

$xml_string = simplexml_load_string($xml_body);

foreach ($xml_string->xpath('//plugin') as $character)
        $xml_plugins[] = $character->name;

foreach ($plugins as $value) 
    foreach ($value as $pkey)
        $global_plugins[] = $pkey["Name"];

$matches = array_intersect($xml_plugins, $global_plugins);

if (count($matches) > 0) 
    echo "Match found";
else
    echo "No match found";

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...