Results 1 to 4 of 4

Thread: associative arrays

  1. #1
    Join Date
    Jan 2008
    Posts
    441
    Thanks
    67
    Thanked 4 Times in 4 Posts

    Default associative arrays

    i have this code that works for a single entry
    Code:
    $user = new AdWordsUser();
    
    $user->LogDefaults();
    
    $targetingIdeaService = $user->GetTargetingIdeaService('v201008');
    
    $keyword = new Keyword();
    $keyword->text = $kWord;
    $keyword->matchType = 'EXACT';//BROAD , "Phrase"
    
    $selector = new TargetingIdeaSelector();
    $selector->requestType = 'IDEAS';
    $selector->ideaType = 'KEYWORD';
    $selector->requestedAttributeTypes =  array('KEYWORD', 'AVERAGE_TARGETED_MONTHLY_SEARCHES');
      
    $paging = new Paging();
    $paging->startIndex = 0;
    $paging->numberResults = 10;
    $selector->paging = $paging;
    
    $relatedToKeywordSearchParameter = new RelatedToKeywordSearchParameter();
    $relatedToKeywordSearchParameter->keywords = array($keyword);
    
    $keywordMatchTypeSearchParameter = new KeywordMatchTypeSearchParameter();
    $keywordMatchTypeSearchParameter->keywordMatchTypes = array('EXACT');//BROAD
    
    $selector->searchParameters =
      array($relatedToKeywordSearchParameter, $keywordMatchTypeSearchParameter);
    
    $page = $targetingIdeaService->get($selector);
    
    if (isset($page->entries)) {  
    
    echo '<div id="output"><ul>';
    	foreach ($page-> entries as $targetingIdea) {
    	  echo '<li><a href="#">';
    	  $data = MapUtils::GetMap($targetingIdea->data);//
    	  
    	  $keyword = $data['KEYWORD']->value;
    	  
    	  $averageMonthlySearches =  isset($data['AVERAGE_TARGETED_MONTHLY_SEARCHES']->value)
    		  ? $data['AVERAGE_TARGETED_MONTHLY_SEARCHES']->value : 0;
    	  
    	  echo  $keyword->text . '</a>';
    	  echo  ' match types:' . $keyword->matchType;
    	  echo  ' / ' . $averageMonthlySearches . ' monthly searches';
    	  echo '</li>';
    	}
    echo '</ul></div>';
    however i would like to use a different class and pass in associative arrays like this (attempt but code does not work)
    Code:
    error_reporting(E_STRICT | E_ALL);
    
    $path = dirname(__FILE__) . '/../../src';
    set_include_path(get_include_path() . PATH_SEPARATOR . $path);
    
    require_once 'Google/Api/Ads/AdWords/Lib/AdWordsUser.php';
    require_once 'Google/Api/Ads/Common/Util/MapUtils.php';
    
    if(isset($_POST['SearchIdeasFormField']) && $kWord != '')  {
    
    	try {
    	  $user = new AdWordsUser();
    
    	  $user->LogDefaults();
    
    	  $targetingIdeaService = $user->GetTargetingIdeaService('v201008');
    
    	  $keyword = new Keyword();
    	  $keyword->text = $kWord;
    	  $keyword->matchType = 'EXACT';//BROAD , "Phrase"
    
    	  $selector = new TargetingIdeaSelector();
    	  $selector->requestType = 'IDEAS';
    	  $selector->ideaType = 'KEYWORD';
    	  $selector->requestedAttributeTypes =  array('KEYWORD'=>'AVERAGE_TARGETED_MONTHLY_SEARCHES', 'KEYWORD'=>'COMPETITION','KEYWORD'=>'SEARCH_SHARE');
    		  
    	  $paging = new Paging();
    	  $paging->startIndex = 0;
    	  $paging->numberResults = 10;
    	  $selector->paging = $paging;
    
    	  $relatedToKeywordSearchParameter = new RelatedToKeywordSearchParameter();
    	  $relatedToKeywordSearchParameter->keywords = array($keyword);
    
    	  $keywordMatchTypeSearchParameter = new KeywordMatchTypeSearchParameter();
    	  $keywordMatchTypeSearchParameter->keywordMatchTypes = array('EXACT');//BROAD
    
    	  $selector->searchParameters =
    		  array($relatedToKeywordSearchParameter, $keywordMatchTypeSearchParameter);
    
    	  $page = $targetingIdeaService->get($selector);
    
    	  if (isset($page->entries)) {  
    		
    		// THIS PART NEEDS WORK
    		echo '<div id="output"><ul>';
    			foreach ($page-> entries as $targetingIdea=>$val) {
    			  echo '<li><a href="#">';
    			  $data = MapUtils::GetMapEntries($val->data);//NEW CLASS
    			  
    			  $keyword = $data['KEYWORD']->value;
    			  
    			  
    			  $averageMonthlySearches =  isset($data['AVERAGE_TARGETED_MONTHLY_SEARCHES']->value)
    				  ? $data['AVERAGE_TARGETED_MONTHLY_SEARCHES']->value : 0;
    			  
    			  $competition = isset($data2['COMPETITION']->value)
    				  ? $data2['COMPETITION']->value : 0;
    				  
    			  $searchShare = isset($data3['SEARCH_SHARE']->value)
    				  ? $data3['SEARCH_SHARE']->value : 0;
    				  
    			  echo  $keyword->text . '</a>';
    			  echo  ' match types:' . $keyword->matchType;
    			  echo  ' / ' . $averageMonthlySearches . ' monthly searches';
    			  echo  ' / ' . $competition . ' competition';
    			  echo  ' / ' . $searchShare . ' search share';
    			  echo '</li>';
    			}
    		echo '</ul></div>';
    			
    	  } else {
    		print "No related keywords were found.\n";
    	  }
    	} catch (Exception $e) {
    	  print $e->getMessage();
    	}
    
    }
    here are the 2 class
    Code:
      /**
       * Gets a map (associative array) from an array of map entries. A map entry
       * is any object that has a key and value field.
       * @param array $mapEntries an array of map entries
       * @return array a map built from the keys and values of the map entries
       */
      public static function GetMap(array $mapEntries) {
        $result = array();
        foreach ($mapEntries as $mapEntry) {
          $result[$mapEntry->key] = $mapEntry->value;
        }
        return $result;
      }
    
      /**
       * Gets an array of map entries from a map (associative array). A map entry
       * is any object that has a key and value field. An optional map entry class
       * name can be specified for constructing the entries, otherise the stdClass
       * is used.
       * @param array $map a map from key to value
       * @param string $mapEntryClassName an optional class name to use when
       *     constructing the map entries
       * @return array an array of map entries built from the key-value pairs in
       *     the map
       */
      public static function GetMapEntries(array $map, $mapEntryClassName = NULL) {
        $result = array();
        foreach($map as $key => $value) {
          if (isset($mapEntryClassName)) {
            $entry = new $mapEntryClassName();
          } else {
            $entry = (object) array();
          }
          $entry->key = $key;
          $entry->value = $value;
          $result[] = $entry;
        }
        return $result;
      }
    Last edited by ggalan; 06-22-2011 at 08:05 PM.

  2. #2
    Join Date
    Jan 2008
    Posts
    441
    Thanks
    67
    Thanked 4 Times in 4 Posts

    Default

    anyone?

  3. #3
    Join Date
    Jan 2008
    Posts
    441
    Thanks
    67
    Thanked 4 Times in 4 Posts

    Default

    i got it to out values but the 3 loops make it VERY SLOW. can anyone help me out with syntax please

    Code:
    try {
    	  $user = new AdWordsUser();
    
    	  // Log SOAP XML request and response.
    	  $user->LogDefaults();
    
    	  // Get the TargetingIdeaService.
    	  $targetingIdeaService = $user->GetTargetingIdeaService('v201008');
    	  $targetingIdeaService2 = $user->GetTargetingIdeaService('v201008');
    	  $targetingIdeaService3 = $user->GetTargetingIdeaService('v201008');
    
    	  // Create seed keyword.
    	  $keyword = new Keyword();
    	  $keyword->text = $kWord;
    	  $keyword->matchType = 'EXACT';
    
    	  // Create selector.
    	  $selector = new TargetingIdeaSelector();
    	  $selector->requestType = 'IDEAS';
    	  $selector->ideaType = 'KEYWORD';
    	  $selector->requestedAttributeTypes =  array('KEYWORD', 'AVERAGE_TARGETED_MONTHLY_SEARCHES');
    	 
    
    	  $selector2 = new TargetingIdeaSelector();
    	  $selector2->requestType = 'IDEAS';
    	  $selector2->ideaType = 'KEYWORD';
    	  $selector2->requestedAttributeTypes =  array('KEYWORD', 'COMPETITION');
    	  
    	  $selector3 = new TargetingIdeaSelector();
    	  $selector3->requestType = 'IDEAS';
    	  $selector3->ideaType = 'KEYWORD';
    	  $selector3->requestedAttributeTypes =  array('KEYWORD', 'SEARCH_SHARE');
    	 
    		  
    	  // Set selector paging (required for targeting idea service).
    	  $paging = new Paging();
    	  $paging->startIndex = 0;
    	  $paging->numberResults = 40;
    	  $selector->paging = $paging;
    	  
    	  $paging2 = new Paging();
    	  $paging2->startIndex = 0;
    	  $paging2->numberResults = 40;
    	  $selector2->paging = $paging2;
    	  
    	  $paging3 = new Paging();
    	  $paging3->startIndex = 0;
    	  $paging3->numberResults = 40;
    	  $selector3->paging = $paging3;
    	  
    	  // Create related to keyword search parameter.
    	  $relatedToKeywordSearchParameter = new RelatedToKeywordSearchParameter();
    	  $relatedToKeywordSearchParameter->keywords = array($keyword);
    		
    	  
    	  // Create keyword match type search parameter to ensure unique results.
    	  $keywordMatchTypeSearchParameter = new KeywordMatchTypeSearchParameter();
    	  $keywordMatchTypeSearchParameter->keywordMatchTypes = array('EXACT');//BROAD
    
    	  
    	  $selector->searchParameters = array($relatedToKeywordSearchParameter, $keywordMatchTypeSearchParameter);
    	  $selector2->searchParameters = array($relatedToKeywordSearchParameter, $keywordMatchTypeSearchParameter);
    	  $selector3->searchParameters = array($relatedToKeywordSearchParameter, $keywordMatchTypeSearchParameter);
    
    	  // Get related keywords.
    	  $page = $targetingIdeaService->get($selector);
    	  $page2 = $targetingIdeaService2->get($selector2);
    	  $page3 = $targetingIdeaService3->get($selector3);
    
    	  // Display related keywords.
    	  if (isset($page->entries)) {  
    		
    		echo '<ul>';
    			foreach ($page->entries as $key) {
    				foreach ($page2->entries as $key2) {
    					foreach ($page3->entries as $key3) {
    			 
    					  $data = MapUtils::GetMap($key->data);
    					  $data2 = MapUtils::GetMap($key2->data);
    					  $data3 = MapUtils::GetMap($key3->data);
    					 
    					  $keyword = $data['KEYWORD']->value;  
    						  
    					  echo '<li><a id="name';
    					  echo '" type="text" name="';
    					  echo  $keyword->text;
    					  echo '">';
    					  echo  $keyword->text . '</a>';
    					  
    					  
    					   $averageMonthlySearches =  isset($data['AVERAGE_TARGETED_MONTHLY_SEARCHES']->value)
    						  ? $data['AVERAGE_TARGETED_MONTHLY_SEARCHES']->value : 0;
    					  echo  ' / ' . $averageMonthlySearches . ' monthly searches';
    					  
    					   $competition = isset($data2['COMPETITION']->value)
    						  ? $data2['COMPETITION']->value : 0;
    					  echo  ' / ' . $competition . ' competition';
    					  
    					   $searchShare = isset($data3['SEARCH_SHARE']->value) ? $data3['SEARCH_SHARE']->value : 0; 
    					  echo  ' / ' . $searchShare . ' search share';
    					  
    					  echo '</li>';
    					}
    				}
    			}
    		echo '</ul>';
    			
    	  } else {
    		print "No related keywords were found.\n";
    	  }
    	} catch (Exception $e) {
    	  print $e->getMessage();
    	}

  4. #4
    Join Date
    Jan 2008
    Posts
    441
    Thanks
    67
    Thanked 4 Times in 4 Posts

    Default

    the fix was too simple, the class had it so it would accept an array
    Code:
     $selector->requestedAttributeTypes =  array('KEYWORD', 'AVERAGE_TARGETED_MONTHLY_SEARCHES', 'COMPETITION', 'SEARCH_SHARE');
    not this
    Code:
    $selector->requestedAttributeTypes =  array('KEYWORD'=>'AVERAGE_TARGETED_MONTHLY_SEARCHES', 'KEYWORD'=>'COMPETITION','KEYWORD'=>'SEARCH_SHARE');

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •