2017-02-16 3 views
2

У меня проблема, я не могу найти ответ нигде. Поэтому я размещаю его здесь.

Я следующие переменные хранятся в $ _SESSION переменные:

$_SESSION["pr_first_name"] ="Thomas"; 
$_SESSION["pr_middle_name"] ="Richard"; 
$_SESSION["pr_last_name"] ="Peterson"; 

Теперь мне нужно получить доступ, изменение, а затем сохранить $_SESSION array ключи и их значения. Я написал следующий код для этого:

extract($_SESSION); 

это дает мне переменные с именем $_SESSION ключей, теперь мне нужно эти переменные должны быть сохранены в качестве дополнительных ключей $_SESSION массивов. Как сохранить переменные php в виде ключей к массиву $_SESSION?

+0

'$ _SESSION [$ var] = $ value'? – Ad5001

+0

Вы хотите, чтобы эхо значение, сохраненное в переменной сеанса, было тем, что вы хотите? –

+0

Вы хотите заменить существующие ключи новыми значениями? – RiggsFolly

ответ

0

Если вам необходимо использовать метод extract() по какой-либо причине, то вы можете использовать этот подход, но вы не должны использовать extract() для такого глобальный охват в $ _SESSION является:

$_SESSION["pr_first_name"] ="Thomas"; 
$_SESSION["pr_middle_name"] ="Richard"; 
$_SESSION["pr_last_name"] ="Peterson"; 

$keys = array_keys($_SESSION); 
extract($_SESSION); 
... 
... 
foreach($keys as $key){ 
    $_SESSION[$key] = ${$key}; 
} 

Но гораздо лучше и простой способ заключается в использовании $ _SESSION, как обычный массив:

$tmp = $_SESSION["pr_first_name"]; 
... 
$_SESSION["pr_first_name"] = $tmp 
+1

Использование' extract() 'в области globals - это неприятная беспорядочная вещь, которую нужно избегать любой ценой – RiggsFolly

+1

@RiggsFolly - Определенно согласен, но мы не знаем намерения OP - возможно, это просто для тестирования. Обновлен ответ. –

+0

Лучше, но это больше связано с тем, что вы не используете 'extract' в фрагменте кода, который находится в глобальной области. Лучше использовать его только в пределах функции, то это не влияет на глобальные переменные программ, а все новые переменные уничтожаются после завершения функции – RiggsFolly

0

$ _SESSION - это массив, но для сравнения данных вы можете создавать массивы внутри этого массива.

Если вы сделаете это с вашими данными, вам не нужно будет переименовывать ключи в параграфах имени, поскольку они будут уникальными в новом дополнительном массиве.

ВНИМАНИЕ: Использование экстракта в глобальной области действия является противным, оно распыляет переменные в ваш глобальный охват, который позже только смутит вас или человека, который должен поддерживать ваши сценарии.

session_start(); 

$_SESSION["pr_first_name"] ="Thomas"; 
$_SESSION["pr_middle_name"] ="Richard"; 
$_SESSION["pr_last_name"] ="Peterson"; 

$t = array(
      'pr_first_name' => $_SESSION["pr_first_name"], 
      'pr_middle_name' => $_SESSION["pr_middle_name"], 
      'pr_last_name' => $_SESSION["pr_last_name"] 
     ); 

$_SESSION['new_names'] = $t; 


// now amend the new occurance in SESSION however you like 
$_SESSION['new_names']['pr_first_name'] = 'Some new value'; 
$_SESSION['new_names']['pr_first_name'] = 'Some new value'; 
$_SESSION['new_names']['pr_first_name'] = 'Some new value'; 

В качестве альтернативы, если у вас есть большой список событий в $ _SESSION, которые вы хотите скопировать.

session_start(); 

function new_names($sess) 
{ 
    $picks = ['pr_first_name', 'pr_middle_name', 'pr_last_name' ]; 
    $new = []; 
    foreach ($picks as $name) { 
     $new[$name] = $sess[$name]; 
    } 
    return $new;    
} 

$_SESSION["pr_first_name"] ="Thomas"; 
$_SESSION["pr_middle_name"] ="Richard"; 
$_SESSION["pr_last_name"] ="Peterson"; 

$_SESSION['new_names'] = new_names($_SESSION); 

// now amend the new occurance in SESSION however you like 
$new = $_SESSION['new_names']; 
$new['pr_first_name'] = 'Some new value'; 
$new['pr_first_name'] = 'Some new value'; 
$new['pr_first_name'] = 'Some new value';  

И, конечно, если вы использовали эту компартиментализацию с самого начала. было бы еще проще создать новый набор данных

$_SESSION['first']["pr_first_name"] ="Thomas"; 
$_SESSION['first']["pr_middle_name"] ="Richard"; 
$_SESSION['first']["pr_last_name"] ="Peterson"; 

$_SESSION['new'] = $_SESSION['first']; 
$new = $_SESSION['new']; 
$new['pr_first_name'] = 'Some new value'; 
$new['pr_first_name'] = 'Some new value'; 
$new['pr_first_name'] = 'Some new value';  
Смежные вопросы