如果只找到一个结果,则每个循环的PHP都不起作用

时间:2011-05-05 17:47:09

标签: php arrays foreach

我使用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 个答案:

答案 0 :(得分:3)

你可以尝试:

$results_array = (array)$result;

哪个类型应该将其强制转换为数组,即使它是返回的单个结果。

答案 1 :(得分:1)

这一行

if($result_count > 1)
{

当阵列中只有一个项目时,阻止foreach循环运行。你想要

 if($result_count > 0)
 {

答案 2 :(得分:1)

foreach(results AS $curr_result)

应该是:

foreach($results AS $curr_result)

答案 3 :(得分:1)

这就是我为了让它发挥作用所做的事情:

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

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

//loop through $results_array

很抱歉,如果我的信息不够详细且令人困惑,如果您有更好的方法,请告诉我们!

答案 4 :(得分:0)

你的代码中有一个拼写错误,而且它没有使用数组。

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

就像FYI一样,您确实意识到if语句中的循环只会将$ result_name设置为最后一个值。这样做会更容易

$result_name = $results[$result_count - 1]->name;

答案 5 :(得分:0)

这就是我刚刚做的一个干净的解决方案;

我首先为多个元素寻找子数组;

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"设置元素。