ouai tout a faitEffectivement, l'exemple avec le while n'est pas bon.
Car mysql_fetch_assoc() ne te renvoie pas 50 tableaux mais un seul quelque soit le nombre de résultats.
Donc tester à chaque incrémentation si c'est un tableau est un non sens...
Par contre, c'est valide si on utilise pas de boucle.
$arr = array(1, 2, 3, 4, 5);
while($data = each($arr))
{
var_dump($data['value']);
}
/*
int(1)
int(2)
int(3)
int(4)
int(5)
*/
si mysql_fetch_assoc te retourne un tableau ton tu peu utiliser foreach dessusMais par contre on ne pourrait pas lire une ressource avec foreach
$link = mysql_connect('127.0.0.1', 'root');
$query = mysql_query('SELECT * FROM information_schema.COLUMNS') or exit(mysql_error());
foreach(mysql_fetch_assoc($query) as $key => $val)
{
var_dump($key);
}
t'as raison le type fort c'est bien, mais t'as que avec les fonctions que tu peux verifier le type a l'entrer , par contre ca marche qye avec "array", "object" et "Class"En fait je voulais juste souligner l'importance parfois de vérifier le type.
Ce qui plus j'avance dans le php, plus cela devient pour moi quasiment indispensable.
Donc en partant de ce principe, la meilleur façon de traiter les résultats d'un tableau, à mon avis, est dans l'idéal de vérifier si cela est bien un tableau et non se fier à un simple false.
Même si je sais: si false -> eh bien dans toute logique c'est un tableau -> oui je sais.
Je voulais juste signaler que l'approche était différente.
Et ceci peut être appliqué d'une manière générale.
$query = mysql_query($sql) or die(); // true ou false
Pour des requêtes du type: SELECT, SHOW, DESCRIBE, EXPLAIN...
if (is_resource($query = mysql_query($sql)) { //ressource ou false
//...
} else {
die();
}
Dans l'absolu cela ne change pas grand chose, mais c'est peut-être plus logique et/ou compréhensible...$id = (isset($_GET['ID'])) ? (int) $_GET['ID'] : null[/i]
function test(array $arr)
{
print_r($arr);
}
test(array());
test('kikoo');
//Catchable fatal error: Argument 1 passed to test() must be an instance of object, array given
ducoup je viens de regarder sous php 5.3 ca accepte d'autre type que array et object (cool
Bref je me complique la vie pour rien là![]()
Le principal a retenir c'est que c'est mieux d'utiliser OR et AND.
Puis cela évite de les confondre avec d'autres opérateurs...
Oui avec is_ressource devant un résultat qui ne peut retourner qu'une ressource sinon false, c'est comme quand tu veux tester si if($result = mysql_fetch_assoc($query)) retourne un tableau de résultat sinon false...Bref je me complique la vie pour rien là![]()
Le principal a retenir c'est que c'est mieux d'utiliser OR et AND.
Puis cela évite de les confondre avec d'autres opérateurs...
Oui mais pour une seule ligne de ressource et ce n'est pas représentatif.si mysql_fetch_assoc te retourne un tableau ton tu peu utiliser foreach dessusMais par contre on ne pourrait pas lire une ressource avec foreach
$link = mysql_connect('127.0.0.1', 'root'); $query = mysql_query('SELECT * FROM information_schema.COLUMNS') or exit(mysql_error()); foreach(mysql_fetch_assoc($query) as $key => $val) { var_dump($key); }
$query = mysql_fetch_assoc($query);
if (is_array($query)) {
echo $query['toto'];
}
c'est tout de même plus propre bon <?php
$val = 'tt';
$link = $val or die('stop');
var_dump($link); // retourne string(2) "tt"
$link = $val || die('stop');
var_dump($link); // bool(true)
$link = ($val or die('stop'));
var_dump($link); // bool(true)
$link = ($val || die('stop'));
var_dump($link); // bool(true)
?>
Ce n'est pas si simple qu'un problème de parenthèses, car parenthèses ou pas || est incapable de retourner 'tt'.
exact et une ressource c'est pas forcement un tableauOui mais pour une seule ligne de ressource et ce n'est pas représentatif.