Язык скриптования сайтов Parser 3

       

Table2hash


hash. Преобразование таблицы к хешу с заданными ключами


^таблица.hash[ключ]

^таблица.hash[ключ][опции]

^таблица.hash[ключ][столбец значений]

^таблица.hash[ключ][столбец значений][опции]

^таблица.hash[ключ][таблица со столбцами значений]



^таблица.hash[ключ][таблица со столбцами значений][опции]


Ключ может быть задан, как:

·[строка] - название столбца, значение которого считается ключом;  

·{код} - результат исполнения которого считается ключом;  

·(математическое выражение) - результат вычисления которого считается ключом.  


Метод преобразует таблицу к хешу вида:

$хеш[

        $.значение_ключа[

            $.название_столбца[значение_столбца]

            …

        ]

    …

]


Иными словами, метод создает хеш, в котором ключами являются значения, описанные параметром ключ. При этом каждому ключу ставится в соответствие хеш, в котором для всех столбцов таблицы хранятся ассоциации «название столбца - значение столбца в записи».

Если задан столбец значений, то каждому ключу будет соответствовать хеш с одной ассоциацией «название столбца - значение столбца в записи».

Кроме того, можно задать несколько столбцов значений, для этого необходимо передать дополнительным параметром таблицу, в которой перечислены все необходимые столбцы.

Опции - хеш с опциями преобразования.

$.distinct(0/1)

0=наличие в ключевом столбце одинаковых значений считается ошибкой (по-умолчанию);

1=выбрать из таблицы записи с уникальным ключом.

$.distinct[tables]

создать хеш из таблиц, содержащих строки с ключом. [3.0.8]

Пример

Есть список товаров, в котором каждый товар имеет наименование и уникальный код - id. Есть прайс-лист товаров, имеющихся в наличии. Вместо названия товара используется id товара из списка товаров. Все это хранится в двух таблицах.
Подобные таблицы называются связанными. Нам нужно получить данные в виде «товар - цена», т.е. получить данные сразу из двух таблиц.

Реализация:

# это таблица с нашими товарами

$product_list[^table::
create{id   name

1   хлеб

2   колбаса

3   масло 

4   водка

}]

# это таблица с ценами товаров

$price_list[^table::create{id   price

1   6.50

2   70.00

3   60.85

}]

#hash таблицы с ценами по полю id

$price_list_hash[^price_list.hash[id]] 

#перебираем записи таблицы с товарами

^product_list.
menu

    $product_price[$price_list_hash.[$product_list.id].price]

#   проверяем - есть ли цена на товар в нашем hash

    ^if($product_price){ 

#       печатаем название товара и его цену

        $product_list.name - $product_price<br>

    }{ 

#       а у этого товара нет цены, т.е. его нет в наличии

        $product_list.name - нет в наличии<br>

    

}



В результате получим:

    хлеб - 6.50

    колбаса - 70.00

    масло - 60.85

    водка - нет в наличии



Содержание раздела