2014-12-15 3 views
0

У меня этот код в php.Как удалить пустой массив

public function display_children($parent,$level){ 
try { 
      $cmd = $this->connection->prepare('SELECT mem,pid from mytree where pid = ?'); 

      $cmd->execute(array($parent)); 



      while ($row = $cmd->fetch(PDO::FETCH_ASSOC)) { 


       $rec[] = [['v' => $row['mem'], 'f' => $row['mem']], (string)$row['pid'], $row['mem']]; 


       $this->display_children($row['mem'], $level + 1); 

      } 

       echo json_encode(rec); 
     } 
     catch(PDOException $ex){ 
      return $ex->getMessage(); 
     } 

    } 

И это результат в моем AJAX

[][][[{"v":"9","f":"9"},"7","9"],[{"v":"10","f":"10"},"7","10"]][][[{"v":"7","f":"7"},"5","7"],[{"v":"8","f":"8"},"5","8"]] 

Я хочу, чтобы удалить эти пустой массив, чтобы быть как this.is это возможно?

[[{"v":"9","f":"9"},"7","9"],[{"v":"10","f":"10"},"7","10"],[{"v":"7","f":"7"},"5","7"],[{"v":"8","f":"8"},"5","8"]] 

Я попытался использовать это, чтобы удалить пустой массив, но он не удалось удалить.

$rec = array_filter($rec); 

Заранее спасибо.

+0

Я не что-нибудь в вашем коде, которое создало бы эти пустые элементы в начале массива. – Barmar

ответ

1

попробовать что-то вроде этого:

public function display_children($parent,$level, $rec = array()){ 
    try { 
     $cmd = $this->connection->prepare('SELECT mem,pid from mytree where pid = ?'); 

     $cmd->execute(array($parent)); 

     while ($row = $cmd->fetch(PDO::FETCH_ASSOC)) { 

      $rec[] = [['v' => $row['mem'], 'f' => $row['mem']], (string)$row['pid'], $row['mem']]; 

      $rec = $this->display_children($row['mem'], $level + 1, $rec); 
     } 
    } 
    catch(PDOException $ex){ 
     //return $ex->getMessage(); 
     return $rec; 
    } 

    return $rec; 
} 

Первый звонок:

echo json_encode(display_children(5, 0)); 
+0

это не может работать, потому что, как только цикл while проходит только один раз, существует $ true. – Benjamin

+0

«echo json_encode» начинается после цикла в теме. поэтому во всех случаях будет отображаться пустой массив. поэтому нам нужно пропустить «echo json_encode», если тело цикла пропущено. –

+0

почти получил это [[{"v": "9", "f": "9"}, "7", "9"], [{"v": "10", "f": "10" }, "7", "10"]] [[{ "v": "7", "F": "7"}, "5", "7"], [{ "V": "8", «f»: «8»}, «5», «8»]], но есть] [около 10, ему это должно понравиться [[{"v": "9", "f": "9"}, "7", "9"], [{ "v": "10", "F": "10"}, "7", "10"], [{ "v": "7", "F" : "7"}, "5", "7"], [{"v": "8", "f": "8"}, "5", "8"]] – ashTon

2

вы можете использовать array_filter, чтобы сделать это.

function filter($var){ 
    return !empty($var); 
} 

$array1 = array("a"=>null, "b"=>2, "c"=>3, "d"=>4, "e"=>5); 

$newarray = array_filter($array1, "filter")); 

Результат: Массив ( [Ь] => 2 [с] => 3 [d] => 4 [е] => 5 )

Смежные вопросы