Сравнить вложенные переменные foreach в php без глобалов? - PullRequest
0 голосов
/ 23 апреля 2011

У меня есть несколько разборов данных foreach, которые нужно сравнить друг с другом.Например:

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

  $xml_name = $character->earthname;

  $compare_remote = strtolower(preg_replace("/[^a-zA-Z0-9 ]/", "", $xml_name));

}

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

 foreach ($value as $pkey){

   $value_name = $pkey["spacename"];

   $compare_local = strtolower(preg_replace("/[^a-zA-Z0-9]/", '', $value_name));

 }
}

Как пройти через оба набора foreach, чтобы сравнить все значения в $compare_remote со значениями в $compare_local, я, вероятно, буду использовать levenshtein(), но дляради этого примера что-нибудь подойдет.

Ответы [ 2 ]

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

Не зная, что вы сравниваете, вы можете использовать ассоциативный массив вне обоих циклов в качестве поиска по ключу / значению.Если есть общий ключ, вы можете работать с теми же значениями, которые были вычислены обоими циклами.В идеале я знаю, что вы хотите выполнить итерацию по обоим одновременно, но такая возможность приводит к одному оцененному набору данных.Уникальные ключи сохранены.

$compare[];

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

  $xml_name = $character->earthname;

  $compare[strtolower(preg_replace("/[^a-zA-Z0-9 ]/", "", $xml_name))];

}

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

 foreach ($value as $pkey){

   $value_name = $pkey["spacename"];

   $compare[strtolower(preg_replace("/[^a-zA-Z0-9]/", '', $value_name))];

 }
}
1 голос
/ 23 апреля 2011
    foreach ($xml_string->xpath('//location') as $character) {

      $xml_name = $character->earthname;

      $compare_remote = strtolower(preg_replace("/[^a-zA-Z0-9 ]/", "", $xml_name));

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

          foreach ($value as $pkey){

              $value_name = $pkey["spacename"];

              $compare_local = strtolower(preg_replace("/[^a-zA-Z0-9]/", '', $value_name));

                if( $compare_remote==$compare_local) echo "match";
          }
        }

 }
...