Question théorique qui n'a peut-être aucun sens, mais peut-être y at-il une réponse intelligente.
Je veux parcourir le tableau et obtenir ses clés et quelque chose avec eux. Un exemple rapide de ce que je fais:
foreach($array as $key => $value) {
$other_array[$key] = 'something';
}
Maintenant, PHP Mess Detector
crie que $value
est inutilisé dans cette étendue. Par conséquent, je pensais que ce n’était peut-être pas la meilleure façon d’accéder à keys
de mon array
.
Avez-vous une idée de la façon de le faire sans supprimer inutilement values
de ma array
? Cela a-t-il un impact significatif sur les performances ... ou peut-être suis-je simplement paranoïaque et devrais-je continuer sans perdre de temps à quiconque avec des questions stupides :).
Tu pourrais faire quelque chose comme ça
foreach(array_keys($array) as $key) {
// do your stuff
}
Cela ferait le foreach itérer sur un tableau composé des clés de votre tableau au lieu du tableau réel. Notez que ce n'est probablement pas mieux du point de vue des performances.
Ignorez simplement ce message.
Dans PHP, la façon dont vous avez utilisé foreach
est la plus rapide. Il est vrai que vous devriez éviter les variables inutilisées, mais dans ce cas, vous ne pouvez pas l'éviter sans perdre de la performance.
Par exemple. foreach(array_keys($arr) as $key)
est environ 50% à 60% plus lent
que foreach($arr as $key => $notUsed)
.
Ce numéro de phpmd est déjà rapporté ici et il existe également une demande de tirage ici .
Jusqu'à ce que phpmd soit mis à jour, vous pouvez aussi utiliser ce petit bidouillage
Dans le fichier /src/main/php/PHPMD/Rule/UnusedLocalVariable.php
dans la méthode collectVariables(..)
(ligne 123 dans mon cas), remplacez
if ($this->isLocal($variable))
par
if ($this->isLocal($variable) && !($this->isChildOf($variable, 'ForeachStatement') && $variable->getName() === '$notUsed'))
Cela empêchera phpmd de signaler $notUsed
n'importe où à l'intérieur d'une boucle foreach.
UPDATE: La recommandation ci-dessus suppose que PHP 5.6 (la version pertinente au moment de la rédaction de cette réponse). Mais le temps a passé et maintenant, en utilisant PHP 7.2, il semble que ce soit l'inverse. Comme toujours, cela dépend du cas d'utilisation exact, mais pour les tableaux associatifs de moins de 100 000 clés, il est plus rapide de stocker array_keys($arr)
dans une variable et de l'utiliser dans une boucle foreach.
Oui, il existe un moyen plus rapide de faire cela: http://php.net/manual/en/function.array-keys.php
C'est valide PHP code, ne corrigez pas le code, mais corrigez PHP MD. Il y a une configuration dans PHP MD 2.2 Et a besoin de cette règle:
<properties>
<property
name="allow-unused-foreach-variables"
description="Allow unused variables in foreach language constructs."
value="false" />
</properties>
Si vous voulez définir toutes les clés à une certaine valeur, vous pouvez simplement le faire de cette façon:
$array = array(
'foo'=> 'oldval1',
'bar'=> 'oldval2',
'baz'=> 'oldval3'
);
$other_array = array_fill_keys(array_keys($array), 'something');
print_r($other_array);
Cela produira:
Array
(
[foo] => something
[bar] => something
[baz] => something
)
boucle pour éviter une foreach dans un moment.
$a = ['1','A','B','12','ui'];
while(true) { sleep(1);
$b = next($a) ? current($a): reset($a);
echo key($a) , ':' , $b , PHP_EOL;
}