Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Добавить в массив ID значение

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
pantela
Отправлено: 04 Декабря, 2017 - 12:52:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Здраст,
Есть строка список пользователей:

Где делитель "\t" значение, а длитель "\r\n" строка

Делаю explode по "\r\n" и прогоняю по foreach, потом ещё внутри explode по "\t" и прогоняю по foreach.

CODE (htmlphp):
скопировать код в буфер обмена
  1. [data] => Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => Sasha
  6.             [1] => Kukushkin
  7.             [2] => Moscow
  8.             [3] => CEO
  9.         )
  10.  
  11.     [1] => Array
  12.         (
  13.             [0] => Oleg
  14.             [1] => Gazmanov
  15.             [2] => Piter
  16.             [3] => SEO
  17.         )
  18.  
  19.     [2] => Array
  20.         (
  21.             [0] => Masha
  22.             [1] => Darina
  23.             [2] => London
  24.             [3] => Sales
  25.         )
  26. )
  27.  


В массив строк надо добавить [id] по ключу foreach, т.е. что было прим. такое
CODE (htmlphp):
скопировать код в буфер обмена
  1. [0] => Array
  2.     (
  3.         [id] => 1
  4.         [0] => Sasha
  5.         [1] => Kukushkin
  6.         [2] => Moscow
  7.         [3] => CEO
  8.     )
  9.  


Важно что бы "id" было первым значением в массиве.

Весь код написан так, и если "$result['data'][$e_k]['id'] = $e_k;" перенеси после "$result['data'][$e_k] = $e_v;", тогда ID добавляется, но в конец, а мне надо первым значение что бы было.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $data_decode_row = explode('\r\n', $data['users_result']);
  3.  
  4. $data_explode_colm = array();
  5. $result = array();
  6. foreach($data_decode_row as $d_k => $d_v){
  7.     $data_explode_colm[$d_k] = explode('\t', $d_v);
  8.  
  9.     foreach($data_explode_colm as $e_k => $e_v){
  10.           // $result['data'][$e_k]['id'] = $e_k;
  11.           $result['data'][$e_k] = $e_v;
  12.     }
  13. }
  14.  


И ещё во втором foreach, вроде должно быть $data_explode_colm[$d_k], но так не работает... хо

Спасибо.

(Отредактировано автором: 04 Декабря, 2017 - 15:17:34)

 
 Top
pantela
Отправлено: 04 Декабря, 2017 - 15:49:40
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Мне поверить что вопрос сложный, или я не ясно поставил задачу...? Однако
 
 Top
Строитель
Отправлено: 04 Декабря, 2017 - 16:02:23
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




pantela, исходный массив(строку) опубликуйте, так легче будет размышлять над локальным примером.

(Отредактировано автором: 04 Декабря, 2017 - 16:02:57)

 
 Top
Мелкий Супермодератор
Отправлено: 04 Декабря, 2017 - 16:47:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




PHP:
скопировать код в буфер обмена
  1. $resultarray = ['id' => 1] + $rowarray;

Или array_merge, что в этом случае даст тот же результат.

Плюс см. str_getcsv и fgetcsv, т.к. разделитель табами - это TSV формат, вариация CSV.


-----
PostgreSQL DBA
 
 Top
pantela
Отправлено: 04 Декабря, 2017 - 16:47:53
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Прим. так, только когда я его подставля ручками, тогда explode не коректно работает, а из базы правельно парсит.
CODE (htmlphp):
скопировать код в буфер обмена
  1. Oleg\tGagarin\tMoscow\tCEO\r\nMax\tStanislavov\tPiter\tSEO\r\nMasha\tDarova\tLondon\tCFO\r\nAlex\tKukushkin\tBerlin\tCoder



Мелкий,
Спс, Но как это будет выглядеть в моём коде...?

+ У меня не CSV, я просто в таком виде храню данные данные в БД, поэтом через explode хотел бы всё...
(Добавление)
При тесте, я понял что сам json_encode у меня сортирует ключи, наичная с 0 (числа) и помто текст...
т.к. при таком варианте
CODE (htmlphp):
скопировать код в буфер обмена
  1. $result_val = array();
  2. $result_key = array();
  3. foreach($data_explode_colm as $e_k => $e_v){
  4.       $result_key['0_id'] = $e_k;
  5.       $result_val = $e_v;
  6.  
  7.       $result['data'] = array_merge($result_key,$result_val);
  8. }


Результат такой:
Цитата:
0:"Sasha"
0_id:50
1:"Kukushkin"
...

(Отредактировано автором: 07 Декабря, 2017 - 12:38:04)

 
 Top
Строитель
Отправлено: 04 Декабря, 2017 - 20:08:50
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




pantela, у меня вышло так
Спойлер (Отобразить)

(Отредактировано автором: 04 Декабря, 2017 - 20:36:26)

 
 Top
pantela
Отправлено: 07 Декабря, 2017 - 12:41:26
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Спасибо, но не понимаю почему у меня разбивка \t не работает, когда я из БД пытаюсь подгрузить массив, как я понял, по print_r из БД у меня выводиться "\t", а когда статический прописываю в коде массив тогда выводиться виде таба " " (т.е. пустота с отступом)

Update:
Сделал, так работает, на сколкьо правельно хз, если есть мелочи подправьте...
PHP:
скопировать код в буфер обмена
  1.       $data_decode_row = explode('\r\n', $data['user_result']);
  2.  
  3.       foreach($data_decode_row as $d_k => $d_v){
  4.  
  5.           $temp = array_reverse(explode('\t', $d_v));
  6.           $temp[] = $d_k;
  7.           $result['data'][] = array_reverse($temp);
  8.       }

(Отредактировано автором: 07 Декабря, 2017 - 13:11:16)

 
 Top
Строитель
Отправлено: 07 Декабря, 2017 - 14:57:23
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




pantela, скорее всего потому, что символы всяческих пробелов, табов, и т.п. вы прописываете в одиночных кавычках (апострофах). По идее, вот так должно отработать:
PHP:
скопировать код в буфер обмена
  1. $data_decode_row = explode("\r\n", $data['user_result']);
  2.  
  3. foreach($data_decode_row as $d_k => $d_v){
  4.     $temp = array_reverse(explode("\t", $d_v));
  5.     $temp[] = $d_k;
  6.     $result['data'][] = array_reverse($temp);
  7. }
P.S.: Кстати, в моём предыдущем примере пробельные символы записаны именно в двойных кавычках Подмигивание
 
 Top
pantela
Отправлено: 07 Декабря, 2017 - 16:29:33
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 765
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Вот именно в одиночных кавычках у меня работает...
Ладно работает не трогаем,
Спс.
 
 Top
Строитель
Отправлено: 07 Декабря, 2017 - 16:41:00
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




pantela пишет:
Вот именно в одиночных кавычках у меня работает...
Уверены? Можно сравнить обе версии:
В двойных
В одинарных
Там кнопку Execute code надо кликнуть, и под ней появится результат.
 
 Top
Sail
Отправлено: 07 Декабря, 2017 - 21:10:23
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




pantela пишет:
Спасибо, но не понимаю почему у меня разбивка \t не работает, когда я из БД пытаюсь подгрузить массив, как я понял, по print_r из БД у меня выводиться "\t", а когда статический прописываю в коде массив тогда выводиться виде таба " " (т.е. пустота с отступом)

Давайте определимся с тем, что в БД записано...
Пара символов '\t', или символ с кодом 0x09?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB