110 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nur\mapper\item;
 | 
						|
 | 
						|
use nur\A;
 | 
						|
use nur\b\params\Tparametrable;
 | 
						|
use nur\mapper\base\Mapper;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class Seq2AssocMapper: transformer un flux de tableaux séquentiels en
 | 
						|
 * tableaux associatifs
 | 
						|
 *
 | 
						|
 * --autogen-properties-and-methods--
 | 
						|
 * @method bool|null getParseKeys()
 | 
						|
 * @method array|null getKeys()
 | 
						|
 * @method bool|null setParseKeys(?bool $value)
 | 
						|
 * @method array|null setKeys(?array $value)
 | 
						|
 */
 | 
						|
class Seq2AssocMapper extends Mapper {
 | 
						|
  use Tparametrable;
 | 
						|
 | 
						|
  const PARAMETRABLE_PARAMS_SCHEMA = [
 | 
						|
    "parse_keys" => ["?bool", null, "faut-il analyser le premier élément du flux pour calculer la liste des clés en entrée?"],
 | 
						|
    "keys" => ["?array", null, "liste et ordre des clés en entrée"],
 | 
						|
  ];
 | 
						|
 | 
						|
  /**
 | 
						|
   * @var ?bool faut-il analyser le premier élément du flux pour calculer la
 | 
						|
   * liste des clés en entrée? null signifie que la valeur est dynamique: elle
 | 
						|
   * vaut ($keys === null)
 | 
						|
   *
 | 
						|
   * Si ce champ est vrai, le premier élément est toujours consommé. cependant,
 | 
						|
   * la liste des champs n'est analysée que si elle n'a pas été spécifiée au
 | 
						|
   * préalable avec {@link setKeys()}
 | 
						|
   */
 | 
						|
  protected $ppParseKeys;
 | 
						|
 | 
						|
  /**
 | 
						|
   * @var array liste des champs en entrée dans l'ordre. si cette valeur n'est
 | 
						|
   * pas spécifiée, elle est calculée à partir du premier élément du flux.
 | 
						|
   */
 | 
						|
  protected $ppKeys;
 | 
						|
 | 
						|
  function _checkKeys(array $keys): bool {
 | 
						|
    $parseKeys = $this->ppParseKeys;
 | 
						|
    $setParseKeys = $parseKeys !== null;
 | 
						|
    if ($parseKeys === null) $parseKeys = $this->ppKeys === null;
 | 
						|
    if ($parseKeys) {
 | 
						|
      if ($this->ppKeys === null) $this->ppKeys = $keys;
 | 
						|
      if ($setParseKeys) $this->ppParseKeys = false;
 | 
						|
      return true;
 | 
						|
    }
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
 | 
						|
  function _mapValues(array $values): array {
 | 
						|
    $keys = $this->ppKeys;
 | 
						|
    if ($keys === null) return $values;
 | 
						|
    $row = [];
 | 
						|
    $index = 0;
 | 
						|
    foreach ($keys as $key) {
 | 
						|
      $row[$key] = A::get($values, $index++, false);
 | 
						|
    }
 | 
						|
    return $row;
 | 
						|
  }
 | 
						|
 | 
						|
  function mapper($item) {
 | 
						|
    $values = A::with($item);
 | 
						|
    if ($this->_checkKeys($values)) return $this->mapToNone();
 | 
						|
    return $this->_mapValues($values);
 | 
						|
  }
 | 
						|
 | 
						|
  #############################################################################
 | 
						|
  const _AUTOGEN_CONSTS = [
 | 
						|
    "" => [self::class, "_autogen_consts"],
 | 
						|
  ];
 | 
						|
  const _AUTOGEN_LITERALS = /*autogen*/[
 | 
						|
    [
 | 
						|
      \nur\b\params\parametrable_utils::class,
 | 
						|
      '\\nur\\b\\params\\parametrable_utils::class',
 | 
						|
    ],
 | 
						|
    [
 | 
						|
      self::PARAMETRABLE_PARAMS_SCHEMA,
 | 
						|
      'self::PARAMETRABLE_PARAMS_SCHEMA',
 | 
						|
    ],
 | 
						|
  ];
 | 
						|
  const _AUTOGEN_METHODS = /*autogen*/[
 | 
						|
    [
 | 
						|
      \nur\b\params\parametrable_utils::class,
 | 
						|
      '_autogen_methods_getters',
 | 
						|
      self::PARAMETRABLE_PARAMS_SCHEMA,
 | 
						|
      null,
 | 
						|
    ],
 | 
						|
    [
 | 
						|
      \nur\b\params\parametrable_utils::class,
 | 
						|
      '_autogen_methods_setters',
 | 
						|
      self::PARAMETRABLE_PARAMS_SCHEMA,
 | 
						|
      null,
 | 
						|
    ],
 | 
						|
  ];
 | 
						|
  const _AUTO_GETTERS = /*autogen*/[
 | 
						|
    'getParseKeys' => 'parse_keys',
 | 
						|
    'getKeys' => 'keys',
 | 
						|
  ];
 | 
						|
  const _AUTO_SETTERS = /*autogen*/[
 | 
						|
    'setParseKeys' => 'parse_keys',
 | 
						|
    'setKeys' => 'keys',
 | 
						|
  ];
 | 
						|
  #--autogen-dynamic--
 | 
						|
}
 |