в ходе работы потребовалось решить интересную задачку, решил поделится с аудиторией моего любимого форума.
Сразу к делу:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- class CpcData
- {
- // [source][type][campaign][ads][keyword][position] => amount
- private $referrers = [
- 'google' => [ // source
- 'cpc' => [ // type
- 'context' => [ // campaign
- 123456789 => [ // ads
- 'ключевое слово' => [ // keyword
- 2 => 10 // position => amount
- ]
- ],
- 123456790 => [
- 'другое ключевое слово' => [
- 1 => 5
- ]
- ]
- ],
- 'retarget' => [
- 123456791 => [
- 'ключевое слово' => [
- 0 => 11
- ]
- ],
- 123456792 => [
- 'другое ключевое слово' => [
- 0 => 32
- ]
- ]
- ]
- ]
- ],
- 'yandex' => [ // source
- 'cpc' => [ // type
- 'context' => [ // campaign
- 223456789 => [ // ads
- 'ключевое слово' => [ // keyword
- 2 => 10 // position => amount
- ]
- ],
- 223456790 => [
- 'другое ключевое слово' => [
- 1 => 5
- ]
- ]
- ],
- 'retarget' => [
- 223456791 => [
- 'ключевое слово' => [
- 0 => 3
- ]
- ],
- 223456792 => [
- 'другое ключевое слово' => [
- 0 => 22
- ]
- ]
- ]
- ]
- ]
- ];
- /**
- * Если все параметры === null:
- * return $this->referrers;
- * Eсли все параметры !== null:
- * return isset($this->referrers[$p1][$p2][$p3][$p4][$p5][$p6]) ? $this->referrers[$p1][$p2][$p3][$p4][$p5][$p6] : 0;
- * Иначе фильтрует массив по параметрам !== null уменьшая его многомерность по известным звеньям:
- * // частный пример №1
- * $p1 = 'x'; $p2 = 'y'; // $p1 - source, $p2 - type
- * return isset($this->referrers[$p1][$p2]) ? $this->referrers[$p1][$p2] : [];
- * // частный пример №2
- * $type = 'x'; // p2
- * $rf = $this->referrers;
- * foreach($rf as $source => $types) {
- * if(isset($types[$type])) {
- * $rf[$source] = $types[$type];
- * }else{
- * unset($rf[$source]);
- * }
- * }
- * return $rf;
- */
- public function getReferrers($source = null, $type = null, $campaign = null, $ads = null, $keyword = null, $position = null)
- {
- if($source !== null && $type !== null && $campaign !== null && $ads !== null && $keyword !== null && $position !== null) {
- $rf = $this->referrers;
- $rf[$source][$type][$campaign][$ads][$keyword][$position] : 0;
- }elseif ($source !== null || $type !== null || $campaign !== null || $ads !== null || $keyword !== null || $position !== null) {
- /**
- * обработка всех остальных случаев
- */
- }else{
- return $this->referrers;
- }
- }
- }
- ?>