2013-11-06 3 views
0

я есть эта функцияИзменение PHP вывода массива

public function select($table, $rows = '*', $join = null, $where = null, $order = null, $limit = null){ 

     $q = 'SELECT '.$rows.' FROM '.$table; 
    if($join != null){ 
     $q .= ' JOIN '.$join; 
    } 
    if($where != null){ 
      $q .= ' WHERE '.$where; 
     } 
     if($order != null){ 
       $q .= ' ORDER BY '.$order; 
    } 
     if($limit != null){ 
       $q .= ' LIMIT '.$limit; 
     } 

    if($this->tableExists($table)){ 

     $query = @mysql_query($q); 
     if($query){ 

      $this->numResults = mysql_num_rows($query); 

      for($i = 0; $i < $this->numResults; $i++){ 
       $r = mysql_fetch_array($query); 
       $key = array_keys($r); 
       for($x = 0; $x < count($key); $x++){ 

        if(!is_int($key[$x])){ 
         if(mysql_num_rows($query) > 1){ 
          $this->result[$i][$key[$x]] = $r[$key[$x]]; 
         }else if(mysql_num_rows($query) < 1){ 
          $this->result = null; 
         }else{ 
          $this->result[$key[$x]] = $r[$key[$x]]; 
         } 
        } 
       } 
      } 
      return true; 
     }else{ 
      array_push($this->result,mysql_error()); 
      return false; // No rows where returned 
     } 
    }else{ 
     return false; 
    } 
} 

Если я использовать эту функцию, и моя база данных пуста, мой массив выглядит следующим образом

Array() 

это прекрасно!

Если моя база данных имеет 1 записей, это выглядит следующим образом:

Array 
(
    [id] => 1 
    [a] => 0 
    [b] => 0 
) 

Это не хорошо, потому что, если он имеет больше записей, чем 1 это выглядит следующим образом:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [a] => 0 
      [b] => 0 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [a] => 1 
      [b] => 1 
     ) 

) 

Что Я хочу, что вывод с одной записью выглядит так:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [a] => 0 
      [b] => 0 
     ) 
) 

Как мне изменить функцию на g et этот выход?

+0

Это не ясно, что вы хотите: если вы хотите только один результат - изменить запрос '1' LIMIT или отфильтровать другие результаты, используя' WHERE' пункт – alfasin

ответ

0

изменение

if(mysql_num_rows($query) > 1){ 
    $this->result[$i][$key[$x]] = $r[$key[$x]]; 
}else if(mysql_num_rows($query) < 1){ 
    $this->result = null; 
}else{ 
    $this->result[$key[$x]] = $r[$key[$x]]; 
} 

с

if(mysql_num_rows($query) >= 1){ 
    $this->result[$i][$key[$x]] = $r[$key[$x]]; 
}else{ 
    $this->result = null; 
} 
+0

Works PERFEKT ! Спасибо! –

0

Ваша ошибка в строке:

if(mysql_num_rows($query) > 1){ 

Вы должны принять во внимание первую строку, так "> 1" стать "> 0"

Весь функционал п должно выглядеть следующим образом:

public function select($table, $rows = '*', $join = null, $where = null, $order = null, $limit = null){ 

    $q = 'SELECT '.$rows.' FROM '.$table; 
if($join != null){ 
    $q .= ' JOIN '.$join; 
} 
if($where != null){ 
     $q .= ' WHERE '.$where; 
    } 
    if($order != null){ 
      $q .= ' ORDER BY '.$order; 
} 
    if($limit != null){ 
      $q .= ' LIMIT '.$limit; 
    } 

if($this->tableExists($table)){ 

    $query = @mysql_query($q); 
    if($query){ 

     $this->numResults = mysql_num_rows($query); 

     for($i = 0; $i < $this->numResults; $i++){ 
      $r = mysql_fetch_array($query); 
      $key = array_keys($r); 
      for($x = 0; $x < count($key); $x++){ 

       if(!is_int($key[$x])){ 
        if(mysql_num_rows($query) > 0) 
         $this->result[$i][$key[$x]] = $r[$key[$x]]; 
        else 
         $this->result = null;       
       } 
      } 
     } 
     return true; 
    }else{ 
     array_push($this->result,mysql_error()); 
     return false; // No rows where returned 
    } 
}else{ 
    return false; 
} 
} 
Смежные вопросы