每个循环的PHP不';如果只找到一个结果,则无法工作

每个循环的PHP不';如果只找到一个结果,则无法工作,php,arrays,foreach,Php,Arrays,Foreach,我使用simplexml获取xml结果页并将其转换为数组。然后我使用foreach循环遍历数组记录 问题是,如果数组中只有一个结果,那么foreach循环不会发生,也不会显示任何信息 我必须检测是否只有一行或多行,并根据这一点使用foreach循环或不使用foreach循环 我想看看是否有一种更简单的方法,这样我就不会有那么多的代码,所有的东西都适合foreach循环 以下是一个例子: $result = $data->params->results; $result

我使用simplexml获取xml结果页并将其转换为数组。然后我使用foreach循环遍历数组记录

问题是,如果数组中只有一个结果,那么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;
    }
编辑: 我添加了results变量,这是示例代码,在我的hast中,我没有检查代码以确保它是正确的。如果只有一个结果,则数组如下所示:

  ["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"
同样只是一个简单的例子,我确信上面的代码不是“正确的”,但它应该提供足够的信息来理解我在说什么。

这一行

if($result_count > 1)
{
当数组中只有一项时,阻止foreach循环运行。你想要

 if($result_count > 0)
 {
这条线

if($result_count > 1)
{
当数组中只有一项时,阻止foreach循环运行。你想要

 if($result_count > 0)
 {

您的代码中有一个输入错误,并且它没有使用数组

$result_name = $results[0]->name;
仅供参考,您确实意识到,
if
语句中的循环将简单地将$result\u name设置为最后一个值。这样做会更容易

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

您的代码中有一个输入错误,并且它没有使用数组

$result_name = $results[0]->name;
仅供参考,您确实意识到,
if
语句中的循环将简单地将$result\u name设置为最后一个值。这样做会更容易

$result_name = $results[$result_count - 1]->name;
应该是:

foreach($results AS $curr_result)
应该是:

foreach($results AS $curr_result)

这就是我让它工作的原因:

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

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

//loop through $results_array

对不起,如果我的信息不够详细和混乱,如果你有更好的方法,请让我知道

我就是这样让它工作的:

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

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

//loop through $results_array
对不起,如果我的信息不够详细和混乱,如果你有更好的方法,请让我知道

您可以尝试:

$results_array = (array)$result;
哪种类型应将其强制转换为数组,即使返回的是单个结果。

您可以尝试:

$results_array = (array)$result;

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

以下是我刚才作为一个干净的解决方案所做的

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

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


在XML过程中—通过添加数组元素,您并没有破坏现有的“Foreach”代码,所以您不必在整个“Foreach”代码周围使用冗余代码设置“IF”(isset($data['ComplexArray']['This'][0]),只需使用现有的数组逻辑,它就可以选择“one”“设置元素。

以下是我刚才作为一个干净的解决方案所做的

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

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


在XML过程中—通过添加数组元素,您并没有破坏现有的“Foreach”代码,所以您不必在整个“Foreach”代码周围使用冗余代码设置“IF”(isset($data['ComplexArray']['This'][0]),只需使用现有的数组逻辑,它就可以选择“one”“set element.

我不确定这里的问题是什么,但我可以证明
foreach
在数组中只有一个元素的情况下工作。不确定它是否只是一个错误类型,但您正在循环
结果
,这不是一个有效的变量名,应该是
$results
。如果数组中有多个元素,我会说此脚本不起作用。是的,进一步检查,您正在循环
results
,这不是有效变量,然后在
中,如果
块中引用的是
$result
,则,我甚至不知道这是从哪里来的。非常令人困惑的John。我不确定这里的问题是什么,但我可以证明
foreach
在数组中只有一个元素时工作。不确定它是否只是一个错误类型,但您正在循环
results
,它不是一个有效的变量名,应该是
$results
。如果数组中有多个元素,我会说此脚本不起作用。是的,进一步检查,您正在循环
results
,这不是有效变量,然后在
中,如果
块中引用的是
$result
,则,我甚至不知道这是从哪里来的。非常令人困惑的John。欢迎来到Stack Overflow!“在这里,使用此代码”的答案通常不受欢迎-请您的答案解释其中的代码是如何工作的。欢迎使用堆栈溢出!“在这里,使用此代码”的答案通常不受欢迎-请您的答案解释其中的代码是如何工作的。