2014-09-01 2 views
0

Когда функция в php возвращает массив, и я назначаю ее переменной varialble, такой как «пользователь» ниже. Он копирует массив и поместить его пространство [0]PHP: функции, возвращающие массивы: как получить точную копию возвращаемого массива

$user = query("SELECT * FROM `users` WHERE id = ?", $_SESSION["id"]); 



Array 
(
    [0] => Array 
     (
      [cash] => 127046553.2710 
      [id] => 8 
      [username] => test 
      [hash] => $1$w40Hc/vl$45jJlZ/1x1rqQlEEQP7hE1 
     ) 

) 

Итак, я должен сделать это:

if ($user[0]["cash"]) 

Но было бы лучше сделать просто задать массив для «наличных денег». Каков стандартный способ сделать это в php?

if ($user["cash"]) 

ответ

0

Это из-за функции 'запроса' вы используете.

Функция возвращает (я бы догадался) массив всех возвращенных строк. Поэтому, если будет больше пользователей, вы получите 0=>user1, 1=>user2 и т. Д.

Если вы уверены, что вы получите только один пользователь вы можете сделать следующее:

$user = query("SELECT * FROM `users` WHERE id = ?", $_SESSION["id"]); 
$user = $user[0]; 
1

Заменить/перезаписать массив.

$user = $user[0]; 
+0

Это действительно способ сделать это в php? он мне понравился бы. –

+0

С кодом, который вы предоставили, это лучшее, что мы можем сделать. Резервный код будет означать, что код не используется. Этот код используется для достижения желаемого результата, поэтому он не является избыточным. –

0

Просто переназначить его заранее ...

 
    $user = $user[0] ; 
0

В PHP 5.4+ вы можете сделать следующее:

$query = "SELECT * FROM `users` WHERE id = ?"; 
$user = query($query, $_SESSION["id"])[0]; 

Обратите внимание на [0] в конец.

-1

просто использовать это, надеюсь, может помочь,

$user = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE id = ?", $_SESSION["id"])) or die(mysql_error()); 

используя некоторую обработку ошибок будет больше помощи, чем вообще ничего, используйте mysql_fetch_array() для Зингель строки, а затем получить доступ к данным с помощью $user['cash']

+0

'mysql_ *' устарел и не одобрен для будущих (и текущих) событий. Он также не поддерживает подготовленные заявления. –

+0

Да, я знаю это, но для некоторых из них некоторые из нас все еще используют его, и я, хотя и хорош для некоторого примера, потому что мы более знакомы с этим –

0

ПЕРЕУСТАНОВКИ однако это «code-smell», в котором говорится, что вам может понадобиться дополнительно abstracted или refactored.

Функция запроса возвращает полный набор строк, которые соответствуют запросу, что и должно быть сделано. Возможно, вы захотите добавить еще одну функцию, возможно, query_firstResult(), чтобы вернуть только элемент [0]. Или вы можете добавить параметр к запросу(), например $all = true или $singleResult = false.

Хорошее эмпирическое правило: «Если мне нужно сделать обход один или два раза, все в порядке, но если я должен сделать это в третий раз, пришло время исправить это».

Смежные вопросы