如果$gymnast
对象不在$gymnasts
数组中,我将它添加到我的表中。但是,当我将相同的对象添加到数组时,in_array()
失败(返回1),并将重复的对象添加到数组中。使用print_r
,我看到$gymnast
对象显然与$gymnasts
数组中的第一个元素相同,那么为什么会发生这种情况?我该如何解决?in_array函数无法检查具有多个属性的对象
$体操运动员阵列
Array ([0] => Gymnast Object ([name] => Nastia Liukin [age] => 27 [height] => 5' 3" [olympicYear] => 2008 [medalCount] => 5 [image] => nastia.jpg) [1] => Gymnast Object ([name] => Shawn Johnson [age] => 25 [height] => 4' 11" [olympicYear] => 2008 [medalCount] => 4 [image] => shawn.jpg))
$体操运动员对象
Gymnast Object ([name] => Nastia Liukin [age] => 27 [height] => 5' 3" [olympicYear] => 2008 [medalCount] => 5 [image] => nastia.jpg)
的index.php
<?php
function isDuplicateEntry($gymnast, $gymnasts) {
foreach ($gymnasts as $gym) {
$gymArr = get_object_vars($gym);
$gymnastArr = get_object_vars($gymnast);
if (count(array_diff($gymnastArr, $gymArr)) == 0) { //gymnast object already exists in array
return true;
}
else {
return false;
}
}
}
//Add gymnast when press add submit button
if(isset($_POST['add'])){
//Set gymnast array to all gymnasts in data.txt
$gymnasts = read_file($filename);
//If form has valid elements & no duplicats, add to data.txt file
if($valid_name && $valid_age && $valid_feet && $valid_inches && $valid_olympicYear && $valid_medalCount && $valid_image){
$gymnast = get_gymnast_from_form();
//Make sure gymnast is not null
if(!is_null($gymnast)){
//Prevent from adding duplicates
if(!isDuplicateEntry($gymnast, $gymnasts)){
//Write task to file
write_file($filename, $gymnast);
//Add gymnast to global var gymnasts array
$gymnasts[] = $gymnast;
echo'<div class ="title">Gymnast Added!</div>';
}
}
}
?>
嗨。 in_array函数可能会比较使用那些引用而不是它的键和值的对象。尝试实现一个函数来替换in_array。 –
看到这篇文章:http://stackoverflow.com/questions/17231925/php-in-array-object-comparing –