За последние 24 часа нас посетили 21984 программиста и 988 роботов. Сейчас ищут 670 программистов ...

Помощь с массивом

Тема в разделе "PHP для новичков", создана пользователем MrSullex, 20 апр 2020.

  1. MrSullex

    MrSullex Активный пользователь

    С нами с:
    15 сен 2015
    Сообщения:
    122
    Симпатии:
    1
    Здравствуйте. Есть такое условие:
    PHP:
    1. if(!$this->serversModel->getTotalServers(array('server_id' => (int)$serverid, 'server_monitoring' => 1, 'server_status' => 2))) {
    2.   $result = "Запрашиваемый сервер не существует!";
    3. }
    В server_monitoring указано значение 1. А нужно, чтобы поддерживалось 1 и 2. Как это реализовать?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Непонятна суть вопроса...
    Кем поддерживалась? Функцией? Так покажите нам ее
     
  3. MrSullex

    MrSullex Активный пользователь

    С нами с:
    15 сен 2015
    Сообщения:
    122
    Симпатии:
    1
    В условии server_monitoring должен быть равен 1. А мне нужно исправить, чтобы был либо 1, либо 2.
    PHP:
    1. 'server_monitoring' => 1
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    По русски сказано, покажите внутренности getTotalServers
     
  5. MrSullex

    MrSullex Активный пользователь

    С нами с:
    15 сен 2015
    Сообщения:
    122
    Симпатии:
    1
    PHP:
    1. public function getTotalServers($data = array()) {
    2.         $sql = "SELECT COUNT(*) AS count FROM `servers`";
    3.         if(!empty($data)) {
    4.             $count = count($data);
    5.             $sql .= " WHERE";
    6.             foreach($data as $key => $value) {
    7.                 $sql .= " $key = '" . $this->db->escape($value) . "'";
    8.                
    9.                 $count--;
    10.                 if($count > 0) $sql .= " AND";
    11.             }
    12.         }
    13.         $query = $this->db->query($sql);
    14.         return $query->row['count'];
    15.     }
     
  6. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Пиндец...
    @ADSoft, ему надо server_monitoring = 1 OR server_monitoring = 2
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    @Valick server_monitoring IN( 1,2 )
     
  8. MrSullex

    MrSullex Активный пользователь

    С нами с:
    15 сен 2015
    Сообщения:
    122
    Симпатии:
    1
    а можно пожалуйста пример, как это должно выглядеть?
     
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Попробуйте так
    А чего мне то объясняешь, я это знаю..
    Но без знаний какие параметры ожидаются и как их обрабатывают хрен скажешь )))
    С мобилы неудобно, может завтра напишу..
     
  10. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @ADSoft, я не объясняю, это просто мысли в слух.
     
  11. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    Чтоб сильно не изменять логику и вызов функции предлагаю так

    PHP:
    1. public function getTotalServers($data = array()) {
    2.         $sql = "SELECT COUNT(*) AS count FROM `servers`";
    3.         if(!empty($data)) {
    4.             $count = count($data);
    5.             $sql .= " WHERE";
    6.             foreach($data as $key => $value) {
    7.                 if (is_array($value)) {
    8.                     $sql .= " $key IN (" . implode(',',$value) . ")";                  
    9.                 } else {
    10.                     $sql .= " $key = '" . $this->db->escape($value) . "'";
    11.               }
    12.                 $count--;
    13.                 if($count > 0) $sql .= " AND";
    14.             }
    15.         }
    16.         $query = $this->db->query($sql);
    17.         return $query->row['count'];
    18.     }
    ну и вызывать функцию
    PHP:
    1. if(!$this->serversModel->getTotalServers(array('server_id' => (int)$serverid, 'server_monitoring' => [1,2], 'server_status' => 2))) {
    2.   $result = "Запрашиваемый сервер не существует!";
    ... сознательно убрал экранирование значений, так как судя по всему они жестко передаются в параметрах, а не от пользователя и с целью упрощения понимания. Если нужно экранирование - надо этот момент обработать самостоятельно )
     
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    PHP:
    1. public function getTotalServers( array $data = array() )
    2. {
    3.     $sql = 'SELECT COUNT(*) `count` FROM `servers`';
    4.    
    5.     $db = $this -> db;
    6.    
    7.     $fun = static function ( $f ) use ( $db )
    8.     {
    9.         if ( is_int ( $f ) )
    10.         {
    11.             return $f;
    12.         }
    13.        
    14.         return sprintf ( "'%s'", $db -> escape( $f ) );
    15.     };
    16.    
    17.     if ( $data != array() )
    18.     {
    19.         $a = array();
    20.        
    21.         foreach ( $data AS $name => $values )
    22.         {
    23.             if ( is_array ( $values ) )
    24.             {
    25.                 $a[] = $name . sprintf ( ' IN( %s )', implode ( ',', array_map ( $fun, $values ) ) );
    26.             }
    27.             else
    28.             {
    29.                 $a[] = $name . ' = ' . $fun( $values );
    30.             }
    31.         }
    32.        
    33.         $sql .= ' WHERE ' . implode ( ' AND ', $a );
    34.     }
    35.    
    36.     return $db -> query( $sql ) -> row['count'];
    37. }