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