Pour votre information, dans Laravel, nous avons une fonction d'aide array_set()
qui se traduit par cette fonction
Méthode pour stocker dans un tableau en utilisant la notation pointée
/**
* Définit un élément de tableau à une valeur donnée en utilisant la notation "dot".
*
* Si aucune clé n'est donnée à la méthode, le tableau entier sera remplacé.
*
* @param array $array
* @param string $key
* @param mixed $value
* @return array
*/
public static function set(&$array, $key, $value)
{
if (is_null($key)) {
return $array = $value;
}
$keys = explode('.', $key);
while (count($keys) > 1) {
$key = array_shift($keys);
// Si la clé n'existe pas à cette profondeur, nous allons simplement créer un tableau vide
// pour contenir la valeur suivante, ce qui nous permettra de créer les tableaux pour contenir les valeurs finales
// à la profondeur correcte. Ensuite, nous continuerons à creuser dans le tableau.
if (! isset($array[$key]) || ! is_array($array[$key])) {
$array[$key] = [];
}
$array = &$array[$key];
}
$array[array_shift($keys)] = $value;
return $array;
}
C'est aussi simple que
$array = ['products' => ['desk' => ['price' => 100]]];
array_set($array, 'products.desk.price', 200);
// ['products' => ['desk' => ['price' => 200]]]
Vous pouvez vérifier dans la documentation
Si vous devez plutôt obtenir les données en utilisant la notation pointée, le processus est un peu plus long, mais servi sur un plateau par array_get()
qui se traduit par cette fonction (en fait, la source liée vous montre toutes les classes d'aide liées aux tableaux)
Méthode pour lire à partir d'un tableau en utilisant la notation pointée
/**
* Obtenir un élément d'un tableau en utilisant la notation "dot".
*
* @param \ArrayAccess|array $array
* @param string $key
* @param mixed $default
* @return mixed
*/
public static function get($array, $key, $default = null)
{
if (! static::accessible($array)) {
return value($default);
}
if (is_null($key)) {
return $array;
}
if (static::exists($array, $key)) {
return $array[$key];
}
if (strpos($key, '.') === false) {
return $array[$key] ?? value($default);
}
foreach (explode('.', $key) as $segment) {
if (static::accessible($array) && static::exists($array, $segment)) {
$array = $array[$segment];
} else {
return value($default);
}
}
return $array;
}
Comme vous pouvez le voir, il utilise deux sous-méthodes, accessible()
et exists()
/**
* Déterminer si la valeur donnée est accessible comme un tableau.
*
* @param mixed $value
* @return bool
*/
public static function accessible($value)
{
return is_array($value) || $value instanceof ArrayAccess;
}
Et
/**
* Déterminer si la clé donnée existe dans le tableau fourni.
*
* @param \ArrayAccess|array $array
* @param string|int $key
* @return bool
*/
public static function exists($array, $key)
{
if ($array instanceof ArrayAccess) {
return $array->offsetExists($key);
}
return array_key_exists($key, $array);
}
La dernière chose qu'il utilise, mais que vous pouvez probablement ignorer, est value()
qui est
if (! function_exists('value')) {
/**
* Retourne la valeur par défaut de la valeur donnée.
*
* @param mixed $value
* @return mixed
*/
function value($value)
{
return $value instanceof Closure ? $value() : $value;
}
}