98 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nur;
 | 
						|
 | 
						|
use ArrayAccess;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class akey: des outils pour accéder aux valeurs d'un tableau
 | 
						|
 *
 | 
						|
 * @see valx
 | 
						|
 */
 | 
						|
class akey {
 | 
						|
  /** obtenir la valeur d'une clé */
 | 
						|
  static final function get($array, $key, $default=null) {
 | 
						|
    if ($array instanceof ArrayAccess) {
 | 
						|
      if ($array->offsetExists($key)) return $array->offsetGet($key);
 | 
						|
      else return $default;
 | 
						|
    } else {
 | 
						|
      if (!is_array($array)) $array = A::with($array);
 | 
						|
      return A::get($array, $key, $default);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /** spécifier la valeur d'une clé */
 | 
						|
  static final function set(&$array, $key, $value) {
 | 
						|
    if ($array instanceof ArrayAccess) {
 | 
						|
      $array->offsetSet($key, $value);
 | 
						|
    } else {
 | 
						|
      A::set($array, $key, $value);
 | 
						|
    }
 | 
						|
    return $value;
 | 
						|
  }
 | 
						|
 | 
						|
  /** initialiser $dest avec les valeurs de $values */
 | 
						|
  static final function set_values(&$array, ?array $values): void {
 | 
						|
    if ($values === null) return;
 | 
						|
    foreach ($values as $key => $value) {
 | 
						|
      self::set($array, $key, $value);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /** incrémenter la valeur de la clé */
 | 
						|
  static final function inc(&$array, $key): int {
 | 
						|
    if ($array instanceof ArrayAccess) {
 | 
						|
      $value = (int)$array->offsetGet($key);
 | 
						|
      $array->offsetSet($key, ++$value);
 | 
						|
      return $value;
 | 
						|
    } else {
 | 
						|
      A::ensure_array($array);
 | 
						|
      $value = (int)A::get($array, $key);
 | 
						|
      return $array[$key] = ++$value;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /** décrémenter la valeur de la clé */
 | 
						|
  static final function dec(&$array, $key, bool $allow_negative=false): int {
 | 
						|
    if ($array instanceof ArrayAccess) {
 | 
						|
      $value = (int)$array->offsetGet($key);
 | 
						|
      if ($allow_negative || $value > 0) $array->offsetSet($key, --$value);
 | 
						|
      return $value;
 | 
						|
    } else {
 | 
						|
      A::ensure_array($array);
 | 
						|
      $value = (int)A::get($array, $key);
 | 
						|
      if ($allow_negative || $value > 0) $array[$key] = --$value;
 | 
						|
      return $value;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * fusionner $merge dans la valeur de la clé, qui est d'abord transformé en
 | 
						|
   * tableau si nécessaire
 | 
						|
   */
 | 
						|
  static final function merge(&$array, $key, $merge): void {
 | 
						|
    if ($array instanceof ArrayAccess) {
 | 
						|
      $value = $array->offsetGet($key);
 | 
						|
      A::merge($value, $merge);
 | 
						|
      $array->offsetSet($key, $value);
 | 
						|
    } else {
 | 
						|
      A::ensure_array($array);
 | 
						|
      A::merge($array[$key], $merge);
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * ajouter $value à la valeur de la clé, qui est d'abord transformé en
 | 
						|
   * tableau si nécessaire
 | 
						|
   */
 | 
						|
  static final function append(&$array, $key, $value): void {
 | 
						|
    if ($array instanceof ArrayAccess) {
 | 
						|
      $value = $array->offsetGet($key);
 | 
						|
      A::set($value, null, $value);
 | 
						|
      $array->offsetSet($key, $value);
 | 
						|
    } else {
 | 
						|
      A::ensure_array($array);
 | 
						|
      A::set($array[$key], null, $value);
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |