Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/14: Рейтинг темы: голосов - 14, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 6

Добавление данных в массив

22.08.2012, 12:01. Показов 2933. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, разобраться. Мне необходимо добавить данные в массив, а потом вывести эти данные на экран, разделяя их запятой. Вот мой кусок кода:

Я ввожу в input несколько id пользователей. Например: 8,9,87. Далее, нажимаю на кнопку "Вывести информацию" и за дело берется вот этот экшн:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$array = explode(',', $id); // разделяю id пользователей
$ids = array(); // объявляю массив
foreach($array as $id) // здесь я проверяю, в поле input введен только один id (например: 8) или же сразу несколько id, разделенных запятыми (например: 8,9,87)
{
     $id = (int)$id;
     if(empty($id))
     continue;
     $ids[] = (int)$id;
}
      
if(count($ids) > 1) // если в поле input были введены сразу несколько id, разделенных запятыми (например: 8,9,87), 
                            // то надо проверить каждый id на существование
{
   $us = array(); // объявляю массив
   $users = "SELECT `id` FROM (`users`) WHERE `id` IN (8, 9, 98)"; // проверяю каждый id на существование
   foreach($users as $user) // теперь занимаемся каждым id в отдельности
   {
      if(!empty($ids[$user->id])) // если id существует
      {
         $us[] = $ids[$user->id]; // надо добавить этот существующий id в массив $us
         unset($ids[$user->id]); // после добавления id в массив $us, надо этот самый id уничтожить
      }
      // после того, как проверены все id на существование, надо вывести список всех существующих id на экран, разделяя их запятой (например: 8, 9)
      echo 'Пользователи с идентификаторами '.print_r($us).' добавлены!'; // почему-то $us выводит пустой результат
      return;   
   }
}
Помогите сделать вывод всех существующих id, я не могу разобраться, почему они не добавляются в массив. Спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.08.2012, 12:01
Ответы с готовыми решениями:

Добавление данных в массив
Вообщем мне 14. Так что строго не судить) У меня такой вопрос как можно добавить в массив? Код на РНР у меня таков ...

Добавление данных в массив
Как добавлять к массиву данные не стирая старые, отдельно строкой. например if ($url == true){ echo $index->render( array( ...

Добавление данных в массив
Нашел в интернете вот такой вариант: int Massiv = {1, 1, 2}; Array myArrayTwo = Array.CreateInstance(typeof(String), Massivv); ...

9
67 / 60 / 25
Регистрация: 05.05.2009
Сообщений: 131
22.08.2012, 12:13
Ну во-первых - где сам запрос к базе?
А во вторых - массив $ids числовой, у него ключи 0, 1, 2, а в условии if(!empty($ids[$user->id])) среди ключей массива ищутся айдишники пользователей. Нужно использовать функцию in_array()
0
0 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 6
22.08.2012, 12:19  [ТС]
Цитата Сообщение от Darevill Посмотреть сообщение
Ну во-первых - где сам запрос к базе?
Я использую фреймворк и там у меня запрос к БД идет через модель. Здесь же я просто "грубо" представил сам код, без запроса к БД, чтобы вы понимали, какой код у меня есть на данное время.

Цитата Сообщение от Darevill Посмотреть сообщение
А во вторых - массив $ids числовой, у него ключи 0, 1, 2, а в условии if(!empty($ids[$user->id])) среди ключей массива ищутся айдишники пользователей. Нужно использовать функцию in_array()
Моя ошибка, забыл написать то, что я использовал еще
PHP
1
$ids = array_flip($ids);
, поэтому заместо ключей 0, 1, 2, он использует ключи с id, т.е. 8, 9, 98.


Проблема заключается именно в этом куске кода:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$us = array();
$users = "SELECT `id` FROM (`users`) WHERE `id` IN (8, 9, 98)"; 
   foreach($users as $user) 
   {
      if(!empty($ids[$user->id]))
      {
         $us[] = $ids[$user->id];
         unset($ids[$user->id]);
      }
      echo 'Пользователи с идентификаторами '.print_r($us).' добавлены!'; // почему-то $us выводит пустой результат
      return;   
   }
Почему в массив $us ничего не добавляется? Где я допустил ошибку?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
22.08.2012, 12:24
Цитата Сообщение от emeraudx Посмотреть сообщение
PHP
1
2
3
foreach($users as $user) 
* *{
* * * if(!empty($ids[$user->id]))
а он у вас точно двумерный, массив $users?

Добавлено через 37 секунд
и вообще откуда там взялось $ids?

Добавлено через 42 секунды
вы пытаетесь строку разобрать как массив.. вам foreach ничего приятного не говорит?
0
0 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 6
22.08.2012, 12:30  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
а он у вас точно двумерный, массив $users?
Да, точно. Этот кусок кода уже проверен и точно работает. Проблем в нем нет

Цитата Сообщение от KOPOJI Посмотреть сообщение
и вообще откуда там взялось $ids?
$ids - это массив тех id, которые я вводил через input

Цитата Сообщение от KOPOJI Посмотреть сообщение
вы пытаетесь строку разобрать как массив.. вам foreach ничего приятного не говорит?
Не могли бы на примере, а то не понимаю
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
22.08.2012, 12:33
Цитата Сообщение от emeraudx Посмотреть сообщение
Да, точно
и каким это образом интересно.
PHP
1
2
$users = "SELECT `id` FROM (`users`) WHERE `id` IN (8, 9, 98)"; //это строка!!!
    foreach($users as $user)  { //а мы ее как массив пытаемся разобрать!
0
0 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 6
22.08.2012, 12:38  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
и каким это образом интересно.
PHP
1
2
$users = "SELECT `id` FROM (`users`) WHERE `id` IN (8, 9, 98)"; //это строка!!!
    foreach($users as $user)  { //а мы ее как массив пытаемся разобрать!
Я же говорил, что использую фреймворк, там запрос в БД идет через модель. В этом примере я специально переделал эту модель в строку для того, чтобы показать грубый пример. Вот запрос в БД:

PHP
1
2
3
4
5
6
7
public function user_exists($id)
   {
      return $this->db->select('id')
                      ->where_in('id',$id)
                      ->get('users')
                      ->result();
   }
Эта модель выводит "8, 9, 98", а это значит, что запрос в БД успешен. У меня проблема именно добавления в массив в foreach. Так что я там неправильно написал, что данные в массив не передаются?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
22.08.2012, 12:46
попробуй так тогда
PHP
1
2
3
4
foreach($users as $user) {
echo 'Исходный массив: '; var_dump($user); echo '<br><br>';
echo 'Массив ids: '; var_dump($ids[$user->id]); echo '<br><br>';
}
и посмотри что с ними там..
1
67 / 60 / 25
Регистрация: 05.05.2009
Сообщений: 131
22.08.2012, 13:09
у вас return в теле цикла. то есть после первого шага перебор айдишников заканчивается

Добавлено через 4 минуты
если сделать array_flip, то массив станет таким:
Array ( [8] => 0 [9] => 1 [89] => 2 )
Условие
PHP
1
if(!empty($ids[$user->id]))
не сработает на первом элементе так как попадёт на 0, а второй элемент уже не обрабатывается после return
1
0 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 6
22.08.2012, 13:11  [ТС]
Ребята, у меня получилось. Пока сам не знаю почему, пытаюсь разобраться. Спасибо вам за советы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.08.2012, 13:11
Помогаю со студенческими работами здесь

Добавление данных в массив объектов
void main() { setlocale(LC_ALL, &quot;Russian&quot;); SetConsoleCP (1251); SetConsoleOutputCP (1251); int kol; Group *gr=new...

Добавление данных из ридера в массив
В ридер загрузил один столбец заполненный цифрами. Как теперь перенести его в массив?

Добавление данных в двумерный массив
Есть рабочий код на С++, который считывает данные в формате: A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4 с текстового файла в структуру. ...

Добавление в массив данных в цикле
Здравствуйте, уважаемые! С Labview познакомился недавно. За пол дня не смог сделать задачу, которую я бы, например, на C# написал минут за...

Условие на добавление данных в массив
Всем привет! Имеется следующая проблема: я преобразую данные из одного JSON в GeoJSON путём добавления данных в массив и сохранения в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru