2015-10-26 50 views
0

取消设置我有一个数据库查询的数组:遍历数组和删除/按值

Array 
(
[0] => Array 
    (
     [distance] => 14928 
     [end] => 5 
     [id] => 12 
    ) 

[1] => Array 
    (
     [distance] => 15645 
     [end] => 2 
     [id] => 1 
    ) 

像这样的数组:

$locations = array(
      2,3,5 
     ); 

我想实现的是以下几点: 循环遍历$locations数组,执行查询并删除等于$dbarray[0]['end']的整数,然后再次执行foreach,而没有之前未设置的值。 因此,在这种情况下:

$locations before loop = 2,3,5 

$locations after loop = 2,3 (because the "end" of the first result is 5) 

的foreach与 “新” $locations再次

我有什么至今:

$locations = array(
      2,3,5 
     );  
foreach ($locations as $key => $location) { 
     $query = $em->createQuery(
      'SELECT l,l.distance,l.end,l.id 
      FROM AppBundle:Point l 
      WHERE l.start = :startPoint 
      AND l.end IN (:endPoint) 
      ORDER BY l.distance ASC' 
     ) 
     ->setParameter('startPoint', 1) 
     ->setParameter('endPoint', $locations); 

$result = $query->getResult(); 
    unset($locations[$result[0]['end']]); 
    echo $result[0]['end']."<br />"; 

echo $result[0]['end']只有每行中 “5” 给出。

我认为我的问题是,查询中的$locations始终是“2,3,5”,是不是。什么是正确的方法?

+0

不应该在这里使用变量'0'在这里'$ result [0] ['end']'(一个循环)?因为像这样你只使用'0'的位置,这总是一样的('5')。 – FirstOne

+0

那么,不,从我理解/尝试实现'$ result [0] ['end']'应该总是不一样的,因为前一个不再存在? – PrimuS

+0

我只想删除第一个,所以在这种情况下'5' – PrimuS

回答

0

完整的解决方案:

$start = 1; 
    $locations = array(
     2,3,5,4 
    ); 
    echo "<pre>"; 
    $em = $this->getDoctrine()->getManager($this->getUser()->getDbuser()); 
    foreach ($locations as $key => &$location) { 
     $query = $em->createQuery(
      'SELECT l,l.distance,l.end,l.id 
       FROM AppBundle:Point l 
       WHERE l.start = :startPoint 
       AND l.end IN (:endPoint) 
       ORDER BY l.distance ASC' 
      ) 
      ->setParameter('startPoint', 1) 
      ->setParameter('endPoint', $locations); 

     $result = $query->getResult(); 
     // Remove from array 
     $locations = array_diff($locations,array($result[0]['end'])); 



     echo $result[0]['end']."<br />"; 
    } 
    // Last one in the array 
    echo $result[1]['end']."<br />"; 

也许不是最干净的方式,但我的作品。