У меня есть ошибка, которую я не могу решить.

Вот код

$this->stmt = $this->handle->prepare("SELECT * FROM tb_ph WHERE totalprofit = 0 AND status = '1' AND checks = ''");

$var = $this->stmt->fetchAll();

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

foreach($var as $key => $value){
    $id = $value['id'];
    $username = $value['username'];
    $phone = $value['phone'];
}

Я получаю уведомление: ошибка преобразования массива в строку.

var_dump($var) дает

Array
(
    [0] => Array
        (
            [id] => 3
            [0] => 3
            [username] => rose
            [1] => rose
            [phone] => +2782345578952
            [2] => +2782345578952 
        )

    [1] => Array
        (
            [id] => 4
            [0] => 4
            [username] => josh
            [1] => rose
            [phone] => +0182345578952
            [2] => +0182345578952 
        )

)

Как сделать так, чтобы цикл получал только идентификатор, имя пользователя и телефон каждый раз для двух возвращаемых результатов?

-1
ebuka 20 Дек 2016 в 06:01
1
Где ваш код, вызывающий уведомление? Было бы лучше, если бы вы продемонстрировали свою попытку кода, чтобы мы могли помочь вам найти вашу ошибку, чем просто ожидать, что кто-то напишет код за вас, и вы никогда не научитесь правильно отлаживать свой собственный код.
 – 
Sean
20 Дек 2016 в 06:03
Вот код там. за исключением того, что я не понимаю, что вы имеете в виду под попыткой кода
 – 
ebuka
20 Дек 2016 в 06:08
В вашем коде, показанном здесь, нет символа foreach($var .... Вы показываете только var_dump($var), а поскольку $var = $this->stmt->fetchAll(); также не создает Notice, вы не показываете попытку кода foreach($var ....
 – 
Sean
20 Дек 2016 в 06:10
Спасибо что подметил это. я добавил это
 – 
ebuka
20 Дек 2016 в 06:14
1
Вы должны принять ответ, приведенный ниже, иначе другие подумают, что проблема не решена, и могут опубликовать больше ответов, так работает стек
 – 
Funk Forty Niner
20 Дек 2016 в 06:55

1 ответ

Лучший ответ

Посмотрите на этот бит очень внимательно:

Array
(
    [0] => Array
        (

Он показывает вам, что у вас есть массив массивов, поэтому то, что вы получаете в вашем foreach, - это еще один массив

foreach($var as $arr) {
    /* here $arr is an array in calling print on it will produce the warning you have already seen but ...*/
    print $arr[$id];

}

Потому что здесь вы печатаете только один элемент массива. Аналогично выведите $ arr ['имя пользователя']

1
e4c5 20 Дек 2016 в 06:10
Большое спасибо. он работал, но он получает значения только для первого цикла. как в моем примере, значение массива равно двум, но здесь показан только один результат.
 – 
ebuka
20 Дек 2016 в 06:21
1
Добро пожаловать. Я рад, что мне помогли. Поскольку вы все еще здесь новичок, могу ли я указать, что предпочтительный способ сказать здесь `` спасибо '' - это проголосовать за хорошие вопросы и полезные ответы (как только у вас будет достаточно репутации для этого) и принять наиболее полезный ответ. на любой вопрос, который вы задаете (что также немного повышает вашу репутацию). Когда кто-то отвечает
 – 
e4c5
20 Дек 2016 в 06:37