我有一個數組被傳遞給foreach,即使我已經使用foreach的數百次前,我無法弄清楚爲什麼這是給我該錯誤,Warning: Invalid argument supplied for foreach()
警告:爲foreach()提供的無效參數,儘管一切看起來不錯
switch($searchby){
case 0: // Name
print_r($data);
foreach($data as $key => $i){
if($key % 2 == 0 && $i == $searchfor){
$success = TRUE;
$matches[] = array('name' => $i, 'value' => $data[$key+1]);
}
}
break;
}
的print_r
打印正常陣列,例如(一個實際的例子):
Array
(
[0] => Username
[1] => 4567
[2] => Password
[3] => 4567
[4] => Name
[5] => 4567
[6] => Age
[7] => 4567
[8] => Country
[9] => 4567
[10] => Type
[11] => Register
)
----由於顯然它的工作原理,這裏是與標記棧中的整個調用堆棧與<------
: ----
/// Main.js ///
$("form#Register").submit(function() {
event.preventDefault();
$.post("php/proc.php",{'Command':'registerUser','Data':$(this).serialize()},function (data) { // <---- Original call
console.log(data);
});
return false;
});
// proc.php //
echo json_encode($MainLib->registerUser($db, $data)); // <--------- #1
class MainLib
{
public function registerUser($db, $data){
$pword = $this->hashpword($db, $result1[0]['value'], $result2[0]['value'], 'Register'); // <---------------- #2
}
public function hashpword($db, $data){
$uname = $this->searchData(0,'Username',$data); // <----------- #3
$pword = $this->searchData(0,'Password',$data);
$type = $this->searchData(0,'Type',$data);
switch($type){
case 'Register':
$salt = uniqid(rand(0,99999999),TRUE);
$db->query("UPDATE `Users` SET `salt`='" . $salt . "' WHERE `Username`='" . $uname . "'");
echo "UPDATE `Users` SET `salt`='" . $salt . "' WHERE `Username`='" . $uname . "'";
break;
$result = $db->query("SELECT * FROM `Users` WHERE `Username`='" . $uname . "'");
while($row = $result->fetch_assoc()){
$salt = $row['salt'];
}
}
$salt = base_convert($salt, 26, 10);
$pword = base_convert($pword, 26, 10);
$new_pword = $pword * $salt;
$new_pword = base_convert($new_pword, 10, 17);
$pword = hash('sha512',$new_pword);
return $pword;
}
public function searchData($searchby, $searchfor, $data){
$success = FALSE;
switch($searchby){
case 0: // Name
print_r($data);
foreach($data as $key => $i){ // <--------- ERROR
if($key % 2 == 0 && $i == $searchfor){
$success = TRUE;
$matches[] = array('name' => $i, 'value' => $data[$key+1]);
}
}
break;
case 1: // Value
foreach($data as $key => $i){
if($key % 2 == 0 && $data[$key+1] == $searchfor){
$success = TRUE;
$matches[] = array('name' => $i, 'value' => $data[$key+1]);
}
}
break;
}
if($success) return $matches;
return FALSE;
}
}
您確定該錯誤與該特定行相關嗎? –
只要確保數據是數組,然後在foreach中使用它。 – Rikesh
該錯誤必須由您未發佈的某些代碼引起。我複製了你的代碼並重新創建了你的數組,並且我沒有在'foreach()'上收到任何錯誤。 –