powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Просьба проверить код функции трансформера данных
3 сообщений из 3, страница 1 из 1
Просьба проверить код функции трансформера данных
    #38706287
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть функция, которая выборочно копирует часть данных из одного хеша в другой, используя различные правила трансляции имен ключей.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
function copyhash(&$hash,$data,$fields,$prefix,$function)
{
  foreach ($fields as $field=>$alias)
  {
    $key = (isset($prefix) ? $prefix : '').$alias;
    if (isset($function))
    {
      $key = $function($key);
    }
    $hash[$key] = $data[(is_int($field) ? $alias : $field)];
  }
}
...
copyhash($data,$src1,['field1','field2','field3'=>'alias3','field4']);
copyhash($data,$src2,['FLD1','FLD2','FLD3'=>'A3'],'src2_',strtolower);
copyhash($data,$src3,['SRC3_FLD_A','SRC3_FLD_B','SRC3_FLD_C'],null,strtolower);



Функция работает, но хотелось бы ее «обезопасить» от неправильного использования — проверить, что $hash и $data это именно хеш, $fields это хеш или массив, $prefix это скаляр, а $function это ссылка на функцию.
Не подскажите, как все эти проверки сделать?

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
Просьба проверить код функции трансформера данных
    #38706361
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Есть функция, которая выборочно копирует часть данных из одного хеша в другой, используя различные правила трансляции имен ключей.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
function copyhash(&$hash,$data,$fields,$prefix,$function)
{
  foreach ($fields as $field=>$alias)
  {
    $key = (isset($prefix) ? $prefix : '').$alias;
    if (isset($function))
    {
      $key = $function($key);
    }
    $hash[$key] = $data[(is_int($field) ? $alias : $field)];
  }
}
...
copyhash($data,$src1,['field1','field2','field3'=>'alias3','field4']);
copyhash($data,$src2,['FLD1','FLD2','FLD3'=>'A3'],'src2_',strtolower);
copyhash($data,$src3,['SRC3_FLD_A','SRC3_FLD_B','SRC3_FLD_C'],null,strtolower);



Функция работает, но хотелось бы ее «обезопасить» от неправильного использования — проверить, что $hash и $data это именно хеш, $fields это хеш или массив, $prefix это скаляр, а $function это ссылка на функцию.
Не подскажите, как все эти проверки сделать?

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.

(isset($prefix) ? $prefix : '') это вынести из цикла, зачем каждый раз проверять одно и тоже.

-проверка изсет префикс мягко говоря бесмысленная, у тебя же нет значения по умолчанию
для этого параметра, а если предполагаеться извне передавать нул, так можно сразу передавать пустую строку, а если защита от дурака... так дурак может 0 передать, или фолс

if (isset($function))
{
$key = $function($key); - это странная логика, и данные для вычисления ключа, и функция посутпают извне, врядли логика обработки ключа функцией, это внутрення логика даного копира хешей. ваще вынести.

вцелом ...лучше опиши задачу. тут явно накидано куча.

ЗЫ
начиная откуда берёться кеш и откуда и зачем берёться нужда преобразовывать..

просто только от функции которая основную часть времени проверяет входные данные.
...
Рейтинг: 0 / 0
Просьба проверить код функции трансформера данных
    #38706486
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453(isset($prefix) ? $prefix : '') это вынести из цикла, зачем каждый раз проверять одно и тоже.
Действительно, вынесу.

alex564657498765453-проверка изсет префикс мягко говоря бесмысленная, у тебя же нет значения по умолчанию
Я ведь могу вызвать процедуру только с тремя параметрами, не указанные будут null.

alex564657498765453 if (isset($function))
{
$key = $function($key); - это странная логика, и данные для вычисления ключа, и функция посутпают извне, врядли логика обработки ключа функцией, это внутрення логика даного копира хешей. ваще вынести.

Исходные данные (хеши) берутся из разных источников, это два веб-сервиса (возвращающие объекты в JSON), это SQL-запрос (также возвращающий хеши с ключами в верхнем регистре) и еще один вспомогательный хеш, содержащий вычисленные промежуточные данные. Кроме того, на клиенте не нужны все данные, которые есть в хеше, поэтому чтобы сократить объем передаваемых данных, в конечный хеш копируются только нужные поля.
Все эти данные мне нужно свести в один хеш, который на клиенте будет забираться JS-скриптом и отрисовываться с помощью jQuery.
Чтобы упростить скрипт на клиентской стороне, мне нужно подготовить хеш — какие-то данные из нескольких хешей свести в один, какие-то трансформировать, у каких-то преобразовать ключи.
Аргумент $fields содержит список полей, которые нужно переносить в конечный хеш. В простейшем случае это неассоциированный массив с полями, которые будут скопированы из источника в приемник.
Если одно из полей задано с ключом $field=>$alias, это значит что поле $field источника нужно скопировать в поле $alias приемника.
В разных источниках некоторые поля могут совпадать, поэтому при указании аргумента $prefix в каждому полю в источнике будет добавлен префикс, чтобы не перепутать его с другими полями.
Иногда имена ключей формируются извне (например в mysqli они в верхнем регистре) и тогда их нужно преобразовать. Я бы хотел вообще использовать лямбда-функцию, но то ли неправильно делал, то ли мой PHP их не поддерживает, поэтому пришлось обойти ссылкой на функцию.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Просьба проверить код функции трансформера данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]