PHP для каждого цикла не работает, если найден только один результат - PullRequest
0 голосов
/ 05 мая 2011

Я использую simplexml, чтобы взять страницу результатов xml и превратить ее в массив.Затем я использую цикл foreach для просмотра записей массива.

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

Я должен определить, существует ли только одна строка или несколько строки в зависимости от этого либо использовать цикл foreach, либо нет.

Хотел посмотреть, есть ли более простой способ, поэтому у меня не так много кода, и все вписывается в цикл foreach.

Вот пример:

    $result = $data->params->results;
    $result_count = intval($data->params->totalcount);

    if($result_count > 1)
    {    
        foreach(results AS $curr_result)
        {
            $result_name = $curr_result->name;
        }
    }
    else if($result_count == 1)
    {
        $result_name = $result->name;
    }

Редактировать: Я добавил переменную результатов, это пример кода, и в моем случае я не стал делать код, чтобы сделатьуверен, что это было правильно.Если есть только один результат, массив выглядит так:

  ["fld1"]=>
  string(6) "value1"
  ["fld2"]=>
  string(6) "value2"
  ["fld3"]=>
  string(6) "value3"

If there is more than one result it looks like this:

[0]=>
  ["fld1"]=>
  string(6) "value1"
  ["fld2"]=>
  string(6) "value2"
  ["fld3"]=>
  string(6) "value3"
[1]=>
  ["fld1"]=>
  string(6) "value1"
  ["fld2"]=>
  string(6) "value2"
  ["fld3"]=>
  string(6) "value3"

Опять же простой пример. Я уверен, что приведенный выше код не является «правильным», но он должен дать достаточно информации, чтобы понять, о чем я говорю.

Ответы [ 6 ]

3 голосов
/ 06 мая 2011

Вы можете попробовать:

$results_array = (array)$result;

Какой тип должен привести его к массиву, даже если это был единственный результат, который был возвращен.

1 голос
/ 05 мая 2011

Ну вот что я сделал, чтобы заставить его работать:

$result = $data->params->results;
$result_count = count($result);

if($result_count == 1)
{    
$results_array[0] = $result;
}else
{
$results_array = $result;
}

//loop through $results_array

Извините, если моя информация не была достаточно подробной и запутанной, если у вас есть лучший способ сделать это, пожалуйста, дайте мне знать!

1 голос
/ 05 мая 2011
foreach(results AS $curr_result)

должно быть:

foreach($results AS $curr_result)
1 голос
/ 05 мая 2011

Эта строка

if($result_count > 1)
{

Запрещает запуск цикла foreach, когда в вашем массиве только один элемент.Вы хотите

 if($result_count > 0)
 {
0 голосов
/ 23 сентября 2016

Вот что я только что сделал как чистое решение;

Сначала я искал подчиненный массив для нескольких элементов;

if (isset($data['ComplexArray']['This'][0])) $UseMe = $data['ComplexArray']['This']; else $UseMe[0] = $data['ComplexArray']['This'][0]; foreach ($UseMe as $EachElement) { . . . }

в процессе XML - добавляя элемент массива, вы не нарушаете существующий код "Foreach", поэтому вам не нужно иметь "IF (isset ($ data ['ComplexArray']" ['This'] [ 0])) обвить весь код «FOREACH» избыточным кодом, просто используя существующую логику массива, чтобы он взял элемент набора «one».

0 голосов
/ 05 мая 2011

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

$result_name = $results[0]->name;

Так же, как к вашему сведению, вы понимаете, что цикл в операторе if просто установит $ result_name на последнее значение. Было бы проще сделать

$result_name = $results[$result_count - 1]->name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...