public static function SchemaMetatagManager::pivot in Schema.org Metatag 8
Same name and namespace in other branches
- 8.2 src/SchemaMetatagManager.php \Drupal\schema_metatag\SchemaMetatagManager::pivot()
 
Pivot multiple value results.
Complex serialized value that might contain multiple values. In this case we have to pivot the results.
Parameters
mixed $content: The value to pivot.
Return value
array The pivoted array.
Overrides SchemaMetatagManagerInterface::pivot
1 call to SchemaMetatagManager::pivot()
- SchemaMetatagManagerTest::testPivot in tests/
src/ Unit/ SchemaMetatagManagerTest.php  - @covers ::pivot @dataProvider pivotData
 
File
- src/
SchemaMetatagManager.php, line 108  
Class
- SchemaMetatagManager
 - Class SchemaMetatagManager.
 
Namespace
Drupal\schema_metatagCode
public static function pivot($content) {
  if (!is_array($content) || empty($content)) {
    return $content;
  }
  // Figure out the maximum number of items to include in the pivot.
  // Nested associative arrays should be excluded, only count numeric arrays.
  $count = max(array_map([
    __CLASS__,
    'countNumericKeys',
  ], $content));
  $pivoted = [];
  $exploded = [];
  for ($i = 0; $i < $count; $i++) {
    foreach ($content as $key => $item) {
      // If a lower array is pivoted, pivot that first.
      if (is_array($item) && array_key_exists('pivot', $item)) {
        unset($item['pivot']);
        $item = self::pivot($item);
      }
      // Some properties, like @type, may need to repeat the first item,
      // others may have too few values to fill out the array.
      // Make sure all properties have the right number of values.
      if (is_string($item) || !is_string($item) && self::countNumericKeys($item) <= $count) {
        $exploded[$key] = [];
        $prev = '';
        for ($x = 0; $x < $count; $x++) {
          if (!is_string($item) && self::countNumericKeys($item) > $x) {
            $exploded[$key][$x] = $item[$x];
            $prev = $item[$x];
          }
          elseif (!is_string($item) && self::countNumericKeys($item) > 0) {
            $exploded[$key][$x] = $prev;
          }
          else {
            $exploded[$key][$x] = $item;
          }
        }
        $pivoted[$i][$key] = $exploded[$key][$i];
      }
      else {
        $pivoted[$i][$key] = $item;
      }
    }
  }
  return $pivoted;
}