2012-06-05 49 views
8

Khi sử dụng PHP, tôi thấy mình viết code như thế này rất nhiều:Làm thế nào để xóa một khóa và trả về giá trị từ một mảng PHP?

$target = $_SESSION[AFTER_LOGIN_TARGET]; 
unset($_SESSION[AFTER_LOGIN_TARGET]); 
return $target; 

Trong Python, có một phương pháp dict.pop mà sẽ cho phép tôi làm điều gì đó tương tự như trong một tuyên bố, mà không có một biến tạm thời:

return session.pop(AFTER_LOGIN_TARGET) 

Có chức năng hoặc thủ thuật tương tự trong PHP không?

+1

yeah, các array_pop của php loại bỏ/trả về luôn là yếu tố cuối cùng ... – Sebas

+0

@Sebas nhưng đó không phải những gì của Python 'dict.pop()' hoạt động, và vô dụng trong trường hợp được mô tả – lanzz

+0

tôi biết, đó là những gì tôi đã nói .. – Sebas

Trả lời

8

Tôi không thấy chức năng tích hợp cho chức năng này, nhưng bạn có thể dễ dàng tạo riêng cho mình.

/** 
* Removes an item from the array and returns its value. 
* 
* @param array $arr The input array 
* @param $key The key pointing to the desired value 
* @return The value mapped to $key or null if none 
*/ 
function array_remove(array &$arr, $key) { 
    if (array_key_exists($key, $arr)) { 
     $val = $arr[$key]; 
     unset($arr[$key]); 

     return $val; 
    } 

    return null; 
} 

Bạn có thể sử dụng nó với bất kỳ mảng nào, ví dụ: $_SESSION:

return array_remove($_SESSION, 'AFTER_LOGIN_TARGET'); 
+0

'isset' sẽ đủ. – Eugene

+0

@Eugene - 'isset' sẽ trả về' false' nếu giá trị là 'null', làm cho hàm rời khỏi mục nhập trong mảng. –

+0

Tôi đã nói về 'mảng_key_exists'. 'isset' sẽ đủ. – Eugene

1

Tại sao lại có chức năng trợ giúp? Một cái gì đó như thế:

function getAndRemoveFromSession ($varName) { 
    $var = $_SESSION[$varName]; 
    unset($_SESSION[$varName]); 

    return $var; 
} 

Vì vậy, nếu bạn gọi

$myVar = getAndRemoveFromSession ("AFTER_LOGIN_TARGET"); 

Bạn có những gì bạn yêu cầu (thử nó một chút, tôi đã không sử dụng php nhiều lần: -])

+0

'getAndRemoveFromSession'? – Eugene

+0

Vâng, tôi đã đổi tên thành –

0

Tôi nghĩ rằng những gì bạn đang tìm kiếm là array_slice()

$target = array_slice(
    $_SESSION, 
    array_search('AFTER_LOGIN_TARGET', $_SESSION), 
    1 
); 
Các vấn đề liên quan