我有一个数组,我生成一个可能存在于数组中的随机数,我试图看看随机数是否在数组中。如果它存在于数组中,它将为用户提供某个项目,如果它不在数组中,我希望它什么都不做。我在一个演示页面上写了全部来测试它,当随机#不在数组中时,我不断收到错误。我是否正确检查#是否在阵列中?我不能为我的生活弄明白。
如果您需要更多信息,请告诉我。
错误:
Notice: Undefined offset: 10 in C:\xampp1\htdocs\hvp\battlemasters\play\text.php on line 17
代码:
$items_list = array();
$enemy_items = "1|7|8|10|11";
// Split Items
$enemy_item = explode("|",$enemy_items);
foreach($enemy_item as $item){
array_push($items_list,$item);
}
// Get Total # Of Items In Array
$count = count($items_list);
// Start Random # Drawing
$start = 1;
$end = $count*2;
$random = rand($start,$end);
// Check If $random Exists In Array
if (in_array($items_list[$random],$items_list) == TRUE) {
// Item Exists So Lets Give The Item To The User
}
修改 现在为$ enemy_items = $ r1 ['items']我刚刚在数据库中添加了一个项目供敌人测试,项目#是7
$q1 = 'SELECT * FROM `enemies` WHERE `id`="'.$enemy_id.'"';
$rq1 = mysql_query($q1);
$r1 = mysql_fetch_array($rq1);
$enemy_items = $r1['items'];
$items_list = array();
// Split Items
$items_list = explode("|",$enemy_items);
// Get Total # Of Items In Array
$count = count($items_list);
// Start Random # Drawing
$start = 1;
$end = $count*2;
$random = rand($start,$end);
// Check If $random Exists In Array
if (in_array($random,$items_list)) {
// Check if character already has the item in inventory
$query = 'SELECT * FROM `characters` WHERE `user_id`="'.$_SESSION['user'].'" AND `iid`="'.$random.'" AND `cat`="items"';
$r_query = mysql_query($query);
$result = mysql_fetch_array($r_query);
$exists = mysql_num_rows($r_query);
if($exists == 1) {
$quantity = $result['quantity'];
// Update Characters Inventory
$query = "UPDATE `characters_inventory` SET `quantity`='".$quantity++."' WHERE `user_id`='".$_SESSION['user']."' AND `iid`='".$random."' AND `cat`='items'";
mysql_query($query);
}else{
// Insert New Item
$query = "INSERT INTO `characters_inventory` (`user_id`,`iid`,`cat`,`quantity`) VALUES ('".$_SESSION['user']."','".$random."','items','1')";
mysql_query($query);
}
}
MySQL Stuff:
CREATE TABLE IF NOT EXISTS `enemies` (
`id` int(255) NOT NULL,
`name` varchar(255) NOT NULL,
`type` varchar(255) NOT NULL,
`icon` varchar(255) NOT NULL,
`items` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=94 ;
INSERT INTO `enemies` (`id`, `name`, `type`, `icon`, `items`) VALUES (1, 'Dragon', 'Dragon', 'images/enemies/Dragon_1_1.png', '7');
答案 0 :(得分:2)
这很简单:
if (in_array($random, $items_list))
答案 1 :(得分:2)
$items_list = array();
$enemy_items = "1|7|8|10|11";
// Split Items
$items_list = explode("|",$enemy_items);
// Get Total # Of Items In Array
$count = count($items_list);
// Start Random # Drawing
$start = 1;
$end = $count*2;
$random = rand($start,$end);
// Check If $random Exists In Array
if (in_array($random,$items_list)) {
// Item Exists So Lets Give The Item To The User
echo "it exists.";
}
如果你想检查$ items_list数组中是否存在$random
,只需检查$ random是否存在,不要检查随机索引是否存在。
此外,此处不需要foreach,explode
已经返回一个数组,因此您的字符串"1|7|8|10|11"
将自动转换为数组。
编辑:
要澄清:
通过检查$ items_list [$ random]是否存在,您实际上是在询问数组:
"密钥$ random是否存在于数组中?",最终可能是真的,因为数组是[1,7,8,10,11]
,但实际上真的就是这样:
array(
0 => 1,
1 => 7,
2 => 8,
3 => 10,
4 => 11
);
因此,如果$ random由于某些原因3,if将评估为TRUE,尽管数组中的没有值为3 ,但是有一个键是3。
小心。编辑2:
修复不需要的== TRUE。
编辑3:
走得更远::
既然你看起来很困惑,我会给你一个关于会发生什么的简短例子。
情景1:
in_array($items_list[$random], $items_list)
假设数组是上面那个:
array(
0 => 1,
1 => 7,
2 => 8,
3 => 10,
4 => 11
);
有两种情况:
答:$random
要么是0 [不可能],要么是1,2,3,4。
B:$random
是任何其他号码。
案例A:
如果$ random是2,则if将继续这样:
首先,它将检查KEY 2是否已设置,因此,您的if可以解释为:
if (in_array($items_list[2], $items_list))
但是,由于密钥2存在,它实际上对应于:
in_array(8, $items_list)
因为$ items_list数组的 KEY 2存在且值为8(请检查上面的数组)。
此时,if就像:"那么,$ items_list数组中是否有任何值为8?"答案是正确的,因此,if将评估 DESAPITE THAN ISN&n。真正具有任何价值的东西。
案例B:
我们假设$ random是10(无论如何都是最大值)。
PHP将尝试像以前一样找到相应键的值,但是,也可以通过这种方式看到数组:
array(
0 => 1,
1 => 7,
2 => 8,
3 => 10,
4 => 11,
5 => null,
[...]
10 => null
);
所以,由于密钥10没有值,php会告诉你一个通知,告诉你"嘿先生,密钥10没有价值,因为它没有设置。",也知道as:undefined offset: 10
情景2:
in_array($random, $items_list)
在这种情况下,$ random可以在此Universe中具有任何值,in_array将始终返回true或false,因为它只会检查数组中是否存在VALUE。 (你可以在帖子的最开头找到关于这一点的进一步解释)。
希望这会有所帮助。
答案 2 :(得分:1)
修改上次条件:
// Check If $random Exists In Array
if (isset($items_list[$random])) {
// Item Exists So Lets Give The Item To The User
}