2015-10-31 75 views
1

我从api中提取数据,因此我有一个将一些id存储到数组中的循环。从数组中删除ID是否存在于数据库中?

我需要做的是从我的数据库中选择所有ID,然后从初始数组中删除已在数据库中找到的任何ID。所以我可以继续查询我目前没有的id。

更有意义,请看看下面:

$matches = $database->get_results('SELECT match_id FROM `matches` WHERE `order_id`='.$order_id); 

if ($matchlist->totalGames !== 0) { 
    foreach ($matchlist as $key) { 
     $gameIds[] = $key->matchId; 
    } 
} 

我需要从$删除IDS gameIds如果他们已经被存储在$的比赛。

任何想法? 由于

我曾尝试:

$matches = $database->get_results('SELECT `match_id` FROM `matches` WHERE `order_id`='.$order_id); 
if ($matchlist->totalGames !== 0) { 
    foreach ($matchlist as $key) { 
     $gameIds[] = $key->matchId; 
    } 
    $arr_matches = object2array($matches); 
    $new_array = array_diff($arr_matches, $gameIds); 
    var_dump($new_array); 
} 

错误:

Catchable fatal error: Object of class stdClass could not be converted to string 
+0

所以,你想从数组中删除值存在于数据库中,RIGHT? –

+0

如果数据库已存在于数据库 – Elevant

+0

中,则从$ gameIds中删除该值,如果在$ gameIds中找到,则可循环执行'$ maches'并执行'unset'。 –

回答

1

步骤1:更改对象阵列

function object2array($object) 
{ 
    if (is_object($object)): 
     foreach ($object as $key => $value): 
      $array[$key] = $value; 
     endforeach; 
    else: 
     $array = $object; 
    endif; 
    return $array; 
} 

步骤2:

$arr_matches = object2array($matches) 

$new_array = array_diff($arr_matches , $gameIds); 
// Will remove all elements contained in $gameIds from $arr_matches array. 
+0

明天我会检查这第一件事,万一;和endforeach;比仅仅更好的方法}?有没有我能读到的关于这个的资源 – Elevant

+0

它也是一样,我真的会影响基于我的团队的编码风格。哦,你可以在这里参考array_diff: http://php.net/manual/en/function.array-diff.php – Nere

+1

我修正了它添加另一个循环到我的脚本谢谢:) – Elevant