我从索引20开始得到“Undefined offset”错误,如下面的输出所示:
<b>Notice</b>: Undefined offset: 20 in <b>/var/www/sso/html/wp-content/plugins/auto-login/papex-auto-login.php</b> on line <b>214</b><br />
<br />
<b>Notice</b>: Undefined offset: 21 in <b>/var/www/sso/html/wp-content/plugins/auto-login/papex-auto-login.php</b> on line <b>214</b><br />
<br />
<b>Notice</b>: Undefined offset: 22 in <b>/var/www/sso/html/wp-content/plugins/auto-login/papex-auto-login.php</b> on line <b>214</b><br />
<br />
我的数组$match
- 下面 - 有20个索引。我的SQL问题的输出是正确的 - 我已多次检查它。对于print_r
,foreach循环的输出为echo $value->meta_key
。
似乎while
循环遍历整个$match
数组,但不会终止。这就是为什么我认为它从20开始产生“未定义”偏移量。
我做错了什么;怎么来 - 如果它的权利 - 代码不会退出while
循环?
// Get user id
$db_user_id = $wpdb->get_row("SELECT ID FROM $table_users WHERE user_email = '$user_email'");
// Get user result
$results = $wpdb->get_results("SELECT * FROM $table_usermeta WHERE user_id = '$db_user_id->ID'");
$match = array(
"billing_country",
"billing_first_name",
"billing_last_name",
"billing_company",
"billing_address_1",
"billing_address_2",
"billing_city",
"billing_state",
"billing_postcode",
"billing_email",
"billing_phone",
"shipping_country",
"shipping_first_name",
"shipping_last_name",
"shipping_company",
"shipping_address_1",
"shipping_address_2",
"shipping_city",
"shipping_state",
"shipping_postcode"
);
foreach($results as $value)
{
$check = TRUE;
$i = 0;
while($check == TRUE)
{
if($match[$i] == $value->meta_key)
{
echo $i . ' ';
echo ' inne ';
$check = FALSE;
break;
}
$i++;
}
}
答案 0 :(得分:2)
您应该检查值$match[$i]
是否存在。很明显,您的错误消息会发生,因为它有时不会。
所以,你可以这样做:
if(isset($match[$i]) && $match[$i] == $value->meta_key) {
...
}
或者您可以用以下内容替换foreach循环中的完整部分:
for($i=0; $i<count($match); $i++) {
if($match[$i] == $value->meta_key) {
...
break;
}
}
这样你就可以确保你永远不会出界。
你做错了的主要是你离开while循环的条件只有在你有一个匹配时才会被捕获,而不是在到达数组的末尾时(你从未测试过)。
答案 1 :(得分:0)
显然$value->meta_key
与$match
项中的任何一项都不相等,因此if
不会break
循环和$i
增加超过$match
长度。
答案 2 :(得分:0)
只需在while循环中添加一个条件
// with * we are doing tag indepenedent search. If you know the tag, say it's a `div`, then //div[contains(text(),'Text To find')] can be done
By byXpath = By.xpath("//*[contains(text(),'Text To find')]");
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(byXpath));
答案 3 :(得分:0)
轻松一点:
// This line only for test
$results = array((object) array('meta_key'=>'shipping_state'), (object) array('meta_key'=>'bla-bla'));
foreach($results as $value)
{
if (false !== ($i = array_search($value->meta_key, $match))) {
echo $i . ' ';
echo ' inne ';
}
}