Как получить значение массива?

#php #arrays #unit-testing #zend-framework #phpunit

#php #массивы #модульное тестирование #zend-framework #phpunit

Вопрос:

Я тестирую модели в проекте zend, у меня возник вопрос о том, как получить значение массива, я обнаружил, что это невозможно сделать с помощью $array[index] ;

это метод поиска, который я тестирую:

    static function find($name, $order=null, $limit=null, $offset=null) {
        return self::_selectAndBind(
                get_class(),
                        self::getDefaultAdapter()
                        ->select()
                        ->from('user')
                        ->where('name = ?', array($name))
                        ->order($order)
                        ->limit($limit, $offset)
        );
    }
  

это тестовый пример для find():

 public function testUser2CanFind() {
        $this->assertNotNull($this->_model->find('yes'));

        $this->assertEquals(1, count($this->_model->find('yes')));

        print_r($this->_model->find('yes'));
        //$this->assertEquals('admin',$this->_model->find('yes')[0]->login);
    }
  

Я хочу получить значение имени входа, поэтому мы I print_r($this->_model->find('yes')); получаем:

 ......Array
(
    [0] => Application_Model_User2 Object
        (
            [_table:protected] => user
            [_primary:protected] => Array
                (
                    [0] => id
                )

            [_primary_ai:protected] => id
            [_data:protected] => Array
                (
                    [id] => 1
                    [created] => 2011-05-03 09:41:2
                    [login] => admin
                    [password_hash] => c8ebe700df11
                    [name] => yes
                    [surname] =>
                    [gender] =>
                    [street] =>
                    [postal_code] =>
                    [city] =>
                    [mobile] =>
                    [homephone] =>
                    [email] =>
                    [is_active] => 1
                )

            [_data_changed:protected] => Array
                (
                )

            [_readonly:protected] => Array
                (
                    [0] => id
                )

            [_db:protected] =>
        )

)
  

как я мог бы получить значение [login] => admin ? Я пытался использовать $this->_model->find('yes')[0] , но выдает ошибку, кто-нибудь может помочь?

Комментарии:

1. Отложенный массив пока недоступен, вы не можете использовать напрямую $this->_model->find(‘yes’)[0]. Вы должны использовать временную переменную.

2. Как насчет $this->_model->find('yes')->current() . Я предполагаю, что ваш метод find возвращает набор строк.

3. @Marcin: Пока вы можете избежать этого, вы не должны вызывать «магические методы» напрямую. ::current() вызывается функцией current() . Используйте это вместо.

Ответ №1:

 $entity = current($this->_model->find('yes'));
echo $entity->login;
  

Обновить:

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

 foreach($this->_model->find('yes') as $entity) 
  echo $entity->login;
  

Комментарии:

1. теперь в этом массиве есть только один элемент, но что делать, если в этом массиве несколько элементов?