for($i=0;$i<=count($photoData['data'])-1;$i++){
echo $id = $photoData['data'][$i]['tags']['data'][0]['id'];
$id2 = $photoData['data'][$i]['tags']['data'][1]['id'];
if($id == $fbID){
$photos .= "<div style='float:left;margin:25px;'><a href='crop.php?url=".$photoData['data'][$i]['source']."'><img src='".$photoData['data'][$i]['picture']."'/></a></div>";
}else{
$photos = 'We cant find any photo tagged with you, go back and select another album';
}
}
此处$photoData
是一个数组,$fbID
是Facebook用户ID。
我只打印与$id
匹配的$fbID
,但未输入if
条件。
我还使用$id
检查变量($fbID
和gettype()
)类型。这两个变量只是相同的类型字符串。但它并不匹配。
任何人都可以帮我解决吗?
提前谢谢。
答案 0 :(得分:2)
在获得代码盲时,您错过的一个简单错误的完美示例。
第二行
echo $id = $photoData['data'][$i]['tags']['data'][0]['id'];
应该是
/* assign value to variable */
$id = $photoData['data'][$i]['tags']['data'][0]['id'];
/* if you really wanted that, echo the variable AFTER it is assigned */
echo($id);
因为它更干净。
<强>更新强>
使用
var_dump($id);
var_dump($fbID);
并查看结果。如果一个(或两个)说出类似
的内容 string(9)
它表明变量包含一个字符串,而不是一个整数。要正确比较字符串,您必须更改
if($id == $fbID){
到
if($id === $fbID){
甚至失败(确保他们的字符串)
if(''.$id === ''.$fbID){
希望有所帮助。
更新2
我不确定它是否有意,但
$photos = 'We cant
也可能是
$photos .= 'We cant
因为很容易错过一个点。但这取决于你的其余代码。 ;)
答案 1 :(得分:1)
以下一行看起来很奇怪:
echo $id = $photoData['data'][$i]['tags']['data'][0]['id'];
尝试将其更改为:
// assignment
$id = $photoData['data'][$i]['tags']['data'][0]['id'];
// print statement
echo $id;
修改强> 的
您还可以尝试从两个变量中删除任何尾随空格:
if(trim($id) == trim($fbID)){
$photos .= "<div style='float:left;margin:25px;'><a href='crop.php?url=".$photoData['data'][$i]['source']."'><img src='".$photoData['data'][$i]['picture']."'/></a></div>";
}else{
$photos = 'We cant find any photo tagged with you, go back and select another album';
}
答案 2 :(得分:0)
[编辑]
所选答案提供了大量错误信息。我有一个问题,理解如何使比较更严格使代码工作。你认为恰恰相反。
PHP手册:
$a == $b Equal TRUE if $a is equal to $b after type juggling.
$a === $b Identical TRUE if $a is equal to $b, and they are of the same type. (introduced in PHP 4)
我仍然支持我的答案 - 我认为我走在正确的轨道上......但我们永远不会知道。
我认为问题出在代码的else
部分。
我重新格式化了代码,因此我可以确保您对不匹配的大括号没有任何问题(您没有)。
尝试以下代码。仅供参考 - 我删除了$ id2,因为你没有在你提供的代码中使用它。
echo "Looking for: {$fbID}\n";
$photos = '';
for( $i=0; $i<=count( $photoData['data'] ); $i++ )
{
$id = $photoData['data'][$i]['tags']['data'][0]['id'];
echo $id . ($id == $fbID )?' matches':' DOES NOT MATCH' . "<br>\n";
if( $id == $fbID )
{
$photos .= "<div style='float:left;margin:25px;'><a href='crop.php?url=".$photoData['data'][$i]['source']."'><img src='".$photoData['data'][$i]['picture']."'/></a></div>";
}
else
{
$photos = 'We cant find any photo tagged with you, go back and select another album';
break; // if you don't break, then you're possibly overwriting anything that's been added in the "true" portion of the if statement.
}
}
[编辑]
这里有两个循环。可能有一种方法可以将其重构为单个循环,但这应该可行。
echo "Looking for: {$fbID}<br>\n";
$items = array();
for( $i=0; $i<=count( $photoData['data'] ); $i++ )
{
$id = $photoData['data'][$i]['tags']['data'][0]['id'];
echo $id . ($id == $fbID )?' matches':' DOES NOT MATCH' . "<br>\n";
if( $id == $fbID )
{
$items[] = $photoData['data'][$i];
}
}
$photos = 'We cant find any photo tagged with you, go back and select another album';
if ( count( $items ) )
{
foreach( $items )
{
$photos .= '<div style="float:left;margin:25px;"><a href="crop.php?url=' . $item['source'] . '"><img src="' . $item['picture'] . '"/></a></div>';
}
}
echo $photos;