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 :: Поменять ключь массиву

 PHP.SU

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


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

> Без описания
Noobster
Отправлено: 15 Августа, 2019 - 22:21:21
Post Id



Новичок


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


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




Есть массив
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => Array
  3.         (
  4.         [id] => 1319
  5.         [status] => 0
  6.         [author_id] => 1000
  7.         [client_id] => 1333
  8.         [date] => 2019-08-15 21:21:03
  9.         [name] => Maxim
  10.         [surname] => Malogin
  11.         [comment] => VPI client
  12.     )
  13.  
  14.     [1] => Array
  15.     (
  16.         [id] => 1318
  17.         [status] => 0
  18.         [author_id] => 1000
  19.         [client_id] => 1333
  20.         [date] => 2019-08-15 16:29:30
  21.         [name] => Oleg
  22.         [surname] => Dinisov
  23.         [comment] => No accept
  24.     )
  25. )


Как его преобразовать чтобы на выходе получить:
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => Array
  3.     (
  4.         [0] => id
  5.         [1] => status
  6.         [2] => author_id
  7.         [3] => client_id
  8.         [4] => date_start
  9.         [5] => name
  10.         [6] => surname
  11.         [7] => comment
  12.     )
  13.     [1] => Array
  14.     (
  15.         [0] => 1319
  16.         [1] => 0
  17.         [2] => 1000
  18.         [3] => 1333
  19.         [4] => 2019-08-15 21:21:03
  20.         [5] => Maxim
  21.         [6] => Malogin
  22.         [7] => VPI client
  23.     )
  24.     [2] => Array
  25.     (
  26.         [0] => 1318
  27.         [1] => 0
  28.         [2] => 1000
  29.         [3] => 1333
  30.         [4] => 2019-08-15 16:29:30
  31.         [5] => Oleg
  32.         [6] => Dinisov
  33.         [7] => No accept
  34.     )
  35. )


Спасибо.

(Отредактировано автором: 15 Августа, 2019 - 22:22:14)

 
 Top
Vladimir Kheifets
Отправлено: 16 Августа, 2019 - 21:47:40
Post Id



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


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


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




Noobster пишет:
Есть массив
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => Array
  3.         (
  4.         [id] => 1319
  5.         [status] => 0
  6.         [author_id] => 1000
  7.         [client_id] => 1333
  8.         [date] => 2019-08-15 21:21:03
  9.         [name] => Maxim
  10.         [surname] => Malogin
  11.         [comment] => VPI client
  12.     )
  13.  
  14.     [1] => Array
  15.     (
  16.         [id] => 1318
  17.         [status] => 0
  18.         [author_id] => 1000
  19.         [client_id] => 1333
  20.         [date] => 2019-08-15 16:29:30
  21.         [name] => Oleg
  22.         [surname] => Dinisov
  23.         [comment] => No accept
  24.     )
  25. )


Как его преобразовать чтобы на выходе получить:
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => Array
  3.     (
  4.         [0] => id
  5.         [1] => status
  6.         [2] => author_id
  7.         [3] => client_id
  8.         [4] => date_start
  9.         [5] => name
  10.         [6] => surname
  11.         [7] => comment
  12.     )
  13.     [1] => Array
  14.     (
  15.         [0] => 1319
  16.         [1] => 0
  17.         [2] => 1000
  18.         [3] => 1333
  19.         [4] => 2019-08-15 21:21:03
  20.         [5] => Maxim
  21.         [6] => Malogin
  22.         [7] => VPI client
  23.     )
  24.     [2] => Array
  25.     (
  26.         [0] => 1318
  27.         [1] => 0
  28.         [2] => 1000
  29.         [3] => 1333
  30.         [4] => 2019-08-15 16:29:30
  31.         [5] => Oleg
  32.         [6] => Dinisov
  33.         [7] => No accept
  34.     )
  35. )


Спасибо.


Добрый день!
Попробуйте сделать так:
Спойлер (Отобразить)
Результат:
Спойлер (Отобразить)
Удачи!
 
 Top
Noobster
Отправлено: 19 Августа, 2019 - 13:37:52
Post Id



Новичок


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


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




Вроде работает, Можно как-то получить с много ур. массивом? т.е. если имеется:
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => Array
  3.     (
  4.         [id] => 1319
  5.         [status] => 0
  6.         [author_id] => 1000
  7.         [client_id] => 1333
  8.         [date] => 2019-08-15 21:21:03
  9.         [name] => Maxim
  10.         [surname] => Malogin
  11.         [comment] => VPI client
  12.         [author_data] => Array
  13.         (
  14.             [id] => 1000
  15.             [is_avatar] => 1
  16.             [username] => Maxim Malogin
  17.             [company_id] =>
  18.             [passport_number] => 112233
  19.             [mobile_phone] =>
  20.             [email] => max@mail.ru
  21.         )
  22.     )
  23.  
  24.     [1] => Array
  25.     (
  26.         [id] => 1318
  27.         [status] => 0
  28.         [author_id] => 1000
  29.         [client_id] => 1333
  30.         [date] => 2019-08-15 16:29:30
  31.         [name] => Oleg
  32.         [surname] => Dinisov
  33.         [comment] => No accept
  34.         [author_data] => Array
  35.         (
  36.             [id] => 1000
  37.             [is_avatar] => 1
  38.             [username] => Oleg Dinisov
  39.             [company_id] =>
  40.             [passport_number] => 332211
  41.             [mobile_phone] =>
  42.             [email] => oleg@mail.ru
  43.         )
  44.     )
  45. )


Получить так:
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => Array
  3.     (
  4.         [0] => Header_id
  5.         [1] => Header_status
  6.         [2] => Header_author_id
  7.         [3] => Header_client_id
  8.         [4] => Header_date_start
  9.         [5] => Header_name
  10.         [6] => Header_surname
  11.         [7] => Header_comment
  12.         [8] => Header_author_data_username
  13.         [9] => Header_author_data_passport_number
  14.         [10] => Header_author_data_mobile_phone
  15.         [11] => Header_author_data_email
  16.     )
  17.     [1] => Array
  18.     (
  19.         [0] => 1319
  20.         [1] => 0
  21.         [2] => 1000
  22.         [3] => 1333
  23.         [4] => 2019-08-15 21:21:03
  24.         [5] => Maxim
  25.         [6] => Malogin
  26.         [7] => VPI client
  27.         [8] => Maxim Malogin
  28.         [9] => 112233
  29.         [10] =>
  30.         [11] => max@mail.ru
  31.     )
  32.     [2] => Array
  33.     (
  34.         [0] => 1318
  35.         [1] => 0
  36.         [2] => 1000
  37.         [3] => 1333
  38.         [4] => 2019-08-15 16:29:30
  39.         [5] => Oleg
  40.         [6] => Dinisov
  41.         [7] => No accept
  42.         [8] => Oleg Dinisov
  43.         [9] => 332211
  44.         [10] =>
  45.         [11] => oleg@mail.ru
  46.     )
  47. )

(Отредактировано автором: 19 Августа, 2019 - 14:39:36)

 
 Top
Vladimir Kheifets
Отправлено: 19 Августа, 2019 - 16:16:36
Post Id



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


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


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




Noobster пишет:
Вроде работает, Можно как-то получить с много ур. массивом? т.е. если имеется:
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => Array
  3.     (
  4.         [id] => 1319
  5.         [status] => 0
  6.         [author_id] => 1000
  7.         [client_id] => 1333
  8.         [date] => 2019-08-15 21:21:03
  9.         [name] => Maxim
  10.         [surname] => Malogin
  11.         [comment] => VPI client
  12.         [author_data] => Array
  13.         (
  14.             [id] => 1000
  15.             [is_avatar] => 1
  16.             [username] => Maxim Malogin
  17.             [company_id] =>
  18.             [passport_number] => 112233
  19.             [mobile_phone] =>
  20.             [email] => max@mail.ru
  21.         )
  22.     )
  23.  
  24.     [1] => Array
  25.     (
  26.         [id] => 1318
  27.         [status] => 0
  28.         [author_id] => 1000
  29.         [client_id] => 1333
  30.         [date] => 2019-08-15 16:29:30
  31.         [name] => Oleg
  32.         [surname] => Dinisov
  33.         [comment] => No accept
  34.         [author_data] => Array
  35.         (
  36.             [id] => 1000
  37.             [is_avatar] => 1
  38.             [username] => Oleg Dinisov
  39.             [company_id] =>
  40.             [passport_number] => 332211
  41.             [mobile_phone] =>
  42.             [email] => oleg@mail.ru
  43.         )
  44.     )
  45. )


Получить так:
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] => Array
  3.     (
  4.         [0] => Header_id
  5.         [1] => Header_status
  6.         [2] => Header_author_id
  7.         [3] => Header_client_id
  8.         [4] => Header_date_start
  9.         [5] => Header_name
  10.         [6] => Header_surname
  11.         [7] => Header_comment
  12.         [8] => Header_author_data_username
  13.         [9] => Header_author_data_passport_number
  14.         [10] => Header_author_data_mobile_phone
  15.         [11] => Header_author_data_email
  16.     )
  17.     [1] => Array
  18.     (
  19.         [0] => 1319
  20.         [1] => 0
  21.         [2] => 1000
  22.         [3] => 1333
  23.         [4] => 2019-08-15 21:21:03
  24.         [5] => Maxim
  25.         [6] => Malogin
  26.         [7] => VPI client
  27.         [8] => Maxim Malogin
  28.         [9] => 112233
  29.         [10] =>
  30.         [11] => max@mail.ru
  31.     )
  32.     [2] => Array
  33.     (
  34.         [0] => 1318
  35.         [1] => 0
  36.         [2] => 1000
  37.         [3] => 1333
  38.         [4] => 2019-08-15 16:29:30
  39.         [5] => Oleg
  40.         [6] => Dinisov
  41.         [7] => No accept
  42.         [8] => Oleg Dinisov
  43.         [9] => 332211
  44.         [10] =>
  45.         [11] => oleg@mail.ru
  46.     )
  47. )
Добрый день!
Конечно можно...
Спойлер (Отобразить)
Результат:
Спойлер (Отобразить)
Удачи!
 
 Top
LIME
Отправлено: 19 Августа, 2019 - 17:30:06
Post Id


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


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


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




я бы тупо мапил
никакого смысла в динамическом решении
минус читаемость и минус производительность
 
 Top
Noobster
Отправлено: 20 Августа, 2019 - 14:35:48
Post Id



Новичок


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


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




Vladimir Kheifets, большое спасибо уважаемый ещё раз! (не могу +1 поставить)

LIME, можешь и свой вариант показать?
Если чество записей может быть до 30к, как будет тут работать производительность сложно заранее подумать, ну а читаемость если самого кода, вроде ясно, а если результата, тут без разницы.

Просто если честно в одном случае может быть author_data, а вдругом может быть product_data, и оба с разными ключами, соотвественно динамичность хотелось бы.

И ещё мообще 3ур. массив может быть, т.е. по идее мне надо получить разбивку виде.
PHP:
скопировать код в буфер обмена
  1. Header_date
  2. Header_name
  3. Header_surname
  4. Header_author_data_id
  5. Header_author_data_company_id
  6. Header_author_data_passport_number
  7. Header_author_data_...


Спасибо.

(Отредактировано автором: 20 Августа, 2019 - 14:37:30)

 
 Top
LIME
Отправлено: 20 Августа, 2019 - 14:46:00
Post Id


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


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


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




Noobster пишет:
Просто если честно в одном случае может быть author_data, а вдругом может быть product_data
тоесть тебе заранее не известна вложенность и ключи? это совсем другая задача
не напишу так как мне вставать нельзя, а лежа ну его
решается просто рекурсией с накоплением ключа
Vladimir Kheifets заранее готовить заголовки не обязательно в этом случае
(Добавление)
и не понятно как тогда заголовки формировать вообщето
Header_author_data_id или Header_author_product_id
нипанятна что писать на этом месте
сам определись сначала что тебе надо
а еще лучше зачем тебе это надо
 
 Top
Noobster
Отправлено: 20 Августа, 2019 - 14:53:27
Post Id



Новичок


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


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




Это всё мне требуется для Экспорта данных, с разных источников, для разного формата.

И да верно, заранее я не знаю какие ключи и вложения будут, просто надо сделать макс. динамично, т.е. эту функцию я буду использовать для всех задач, и передавать её разное содержание массива.

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

Спаисбо, и быстрого выздоровления желаю.
 
 Top
LIME
Отправлено: 20 Августа, 2019 - 14:56:58
Post Id


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


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


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




Возможно разделять лучше в 2 пробела
Header__author_data__id
Или точку
(Добавление)
натыкал одной рукой
сервис с состоянием ну да пофиг
Спойлер (Отобразить)

если ключи достаочно разноообразны то выгоднее сначала пройтись и их собрать а потом наполнять результат

(Отредактировано автором: 20 Августа, 2019 - 17:17:10)

 
 Top
Noobster
Отправлено: 21 Августа, 2019 - 14:42:15
Post Id



Новичок


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


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




Вроде всё отлично работает как надо, супер вот только:

1. Если напр. я хочу исключить поле "id", но оно напр. находится в несколько массивах, тогда оно исключается во всех. Как можно исключить определёную? Может можно прописать ключь напр. так "product_data.id".

2. Сейчас оба результата "process" и "headers" по отдельности в массивах, мне надо на выходе 1 массив, где [0] ключи будет перечисление "headers" и дальше уже "process" (т.е. Заголовки и потом Данные). Пробовал array_merge, но что-то не то вроде

3. Как можно $excludes передавать сюда
PHP:
скопировать код в буфер обмена
  1. var_dump($f->process($in_arr), array_keys(Helper_Export::$headers));
т.е. он будет грузится за пределами класса.

Извините за тараканы. Растерялся

(Отредактировано автором: 21 Августа, 2019 - 14:58:25)

 
 Top
LIME
Отправлено: 21 Августа, 2019 - 15:06:05
Post Id


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


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


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




1. Разумеется. Исключай и проверяй полные пути. Я думал ты сам можешь такое догадаться асилить. В питон же вроде собирался уходить)) вырос уже из пыха))
2. Внутри process вставляй хидеры перед отдачей результатов
Там же лучше и состояние сбрасывать для повторения использования.
https://www.php.net/manual/ru/fu...rray-unshift.php
3. В конструктор.
(Добавление)
Тогда и статику сделай приватной.
(Добавление)
3 хотя лучше в process вторым параметром и сразу в статику, а еще лучше вторым параметром в flattenItem
Чем меньше у тебя состояние в классе тем лучше
По хорошему его у сервиса вообще быть не должно. Себе бы так не писал
 
 Top
Noobster
Отправлено: 21 Августа, 2019 - 15:41:41
Post Id



Новичок


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


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




1. Понимаю что надо тут трогать:
PHP:
скопировать код в буфер обмена
  1. if (in_array($key, self::$excludes)) {
  2.     continue;
  3. }

Просто когда проверяю ключь он напр. "id", а в исключение прописываю напр. "[author_data][id]" или "author_data.id" Однако

2. Тоже не осилил, тупо цыфра выводится Однако

3. Сделал (тоже так думал)

Помогите добить Огорчение

Ещё вопрос на сколько объезательно или желательно писать в аргументах функции (array, string)

Про Питон: Ещё раз подниму вопрос, стоит ли переходить на него, если у меня знания ПШП только на Джуниор-Мидл Ур..

(Отредактировано автором: 21 Августа, 2019 - 15:45:05)

 
 Top
LIME
Отправлено: 21 Августа, 2019 - 15:53:12
Post Id


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


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


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




оох
ничего я не буду делать
ты так не научишься
давай сам добивай
Noobster пишет:
у меня знания ПШП только на Джуниор-Мидл Ур..
ты себе льстишь
и это я про Джуниор имею))
(Добавление)
Хочешь питон иди сразу. Нет смысла откладывать
 
 Top
Noobster
Отправлено: 22 Августа, 2019 - 21:56:40
Post Id



Новичок


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


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




Полных 2 дня не догоняю как сделать, всем кто помогли спасибо.

Кто может остальные 2 момента помогите доделать пожалуйста.

http://forum.php.su/topic.php?fo...91301#1566391301
п.1 и п.2

Спасибо!
 
 Top
Noobster
Отправлено: 24 Августа, 2019 - 12:10:56
Post Id



Новичок


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


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




Если кто-то может подскажите другой код, если с этим никак получается доработать.
Спасибо.
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB