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
Форумы портала PHP.SU :: Версия для печати :: Поменять ключь массиву
Форумы портала PHP.SU » » Вопросы новичков » Поменять ключь массиву

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

1. Noobster - 15 Августа, 2019 - 22:21:21 - перейти к сообщению
Есть массив
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. )


Спасибо.
2. Vladimir Kheifets - 16 Августа, 2019 - 21:47:40 - перейти к сообщению
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. )


Спасибо.


Добрый день!
Попробуйте сделать так:
Спойлер (Отобразить)
Результат:
Спойлер (Отобразить)
Удачи!
3. Noobster - 19 Августа, 2019 - 13:37:52 - перейти к сообщению
Вроде работает, Можно как-то получить с много ур. массивом? т.е. если имеется:
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. )
4. Vladimir Kheifets - 19 Августа, 2019 - 16:16:36 - перейти к сообщению
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. )
Добрый день!
Конечно можно...
Спойлер (Отобразить)
Результат:
Спойлер (Отобразить)
Удачи!
5. LIME - 19 Августа, 2019 - 17:30:06 - перейти к сообщению
я бы тупо мапил
никакого смысла в динамическом решении
минус читаемость и минус производительность
6. Noobster - 20 Августа, 2019 - 14:35:48 - перейти к сообщению
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_...


Спасибо.
7. LIME - 20 Августа, 2019 - 14:46:00 - перейти к сообщению
Noobster пишет:
Просто если честно в одном случае может быть author_data, а вдругом может быть product_data
тоесть тебе заранее не известна вложенность и ключи? это совсем другая задача
не напишу так как мне вставать нельзя, а лежа ну его
решается просто рекурсией с накоплением ключа
Vladimir Kheifets заранее готовить заголовки не обязательно в этом случае
(Добавление)
и не понятно как тогда заголовки формировать вообщето
Header_author_data_id или Header_author_product_id
нипанятна что писать на этом месте
сам определись сначала что тебе надо
а еще лучше зачем тебе это надо
8. Noobster - 20 Августа, 2019 - 14:53:27 - перейти к сообщению
Это всё мне требуется для Экспорта данных, с разных источников, для разного формата.

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

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

Спаисбо, и быстрого выздоровления желаю.
9. LIME - 20 Августа, 2019 - 14:56:58 - перейти к сообщению
Возможно разделять лучше в 2 пробела
Header__author_data__id
Или точку
(Добавление)
натыкал одной рукой
сервис с состоянием ну да пофиг
Спойлер (Отобразить)

если ключи достаочно разноообразны то выгоднее сначала пройтись и их собрать а потом наполнять результат
10. Noobster - 21 Августа, 2019 - 14:42:15 - перейти к сообщению
Вроде всё отлично работает как надо, супер вот только:

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));
т.е. он будет грузится за пределами класса.

Извините за тараканы. Растерялся
11. LIME - 21 Августа, 2019 - 15:06:05 - перейти к сообщению
1. Разумеется. Исключай и проверяй полные пути. Я думал ты сам можешь такое догадаться асилить. В питон же вроде собирался уходить)) вырос уже из пыха))
2. Внутри process вставляй хидеры перед отдачей результатов
Там же лучше и состояние сбрасывать для повторения использования.
https://www.php.net/manual/ru/fu...rray-unshift.php
3. В конструктор.
(Добавление)
Тогда и статику сделай приватной.
(Добавление)
3 хотя лучше в process вторым параметром и сразу в статику, а еще лучше вторым параметром в flattenItem
Чем меньше у тебя состояние в классе тем лучше
По хорошему его у сервиса вообще быть не должно. Себе бы так не писал
12. Noobster - 21 Августа, 2019 - 15:41:41 - перейти к сообщению
1. Понимаю что надо тут трогать:
PHP:
скопировать код в буфер обмена
  1. if (in_array($key, self::$excludes)) {
  2.     continue;
  3. }

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

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

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

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

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

Про Питон: Ещё раз подниму вопрос, стоит ли переходить на него, если у меня знания ПШП только на Джуниор-Мидл Ур..
13. LIME - 21 Августа, 2019 - 15:53:12 - перейти к сообщению
оох
ничего я не буду делать
ты так не научишься
давай сам добивай
Noobster пишет:
у меня знания ПШП только на Джуниор-Мидл Ур..
ты себе льстишь
и это я про Джуниор имею))
(Добавление)
Хочешь питон иди сразу. Нет смысла откладывать
14. Noobster - 22 Августа, 2019 - 21:56:40 - перейти к сообщению
Полных 2 дня не догоняю как сделать, всем кто помогли спасибо.

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

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

Спасибо!
15. Noobster - 24 Августа, 2019 - 12:10:56 - перейти к сообщению
Если кто-то может подскажите другой код, если с этим никак получается доработать.
Спасибо.

 

Powered by ExBB FM 1.0 RC1