我试图删除一个数组,其中一个值…(时间)满足特定条件。我目前正在使用的代码看起来像这样:
foreach($_SESSION as $key) {
foreach($key['time'] as $keys=>$value){
if(condition){
unset($key);
}
}
}
数组是这样的
Array
(
[form1] => Array
(
[hash] => lFfKBKiCTG6vOQDa8c7n
[time] => 1401067044
)
[form5] => Array
(
[hash] => TTmLVODDEkI1NrRnAbfB
[time] => 1401063352
)
[form4] => Array
(
[hash] => XCVOvrGbhuqAZehBmwoD
[time] => 1401063352
)
我试着从这些页面中找到解决方案,但没有成功。
删除多维数组中的元素并保存
PHP -取消多维数组
PHP如何取消多维数组的成员?
如果您想要取消其中的值,一个简单的foreach就足够了。考虑这个例子:
$values = array(
'form1' => array('hash' => 'lFfKBKiCTG6vOQDa8c7n', 'time' => 1401067044),
'form5' => array('hash' => 'TTmLVODDEkI1NrRnAbfB', 'time' => 1401063352),
'form4' => array('hash' => 'XCVOvrGbhuqAZehBmwoD', 'time' => 1401063352),
);
$needle = 1401067044;
foreach($values as $key => &$value) {
if($value['time'] == $needle) {
// if you want to remove this key pair use this
unset($values[$key]['time']);
// if you just want to remove the value inside it
$value['time'] = null;
// if you want to remove all of this entirely
unset($values[$key]);
}
}
小提琴
在for循环中取消设置可能会导致问题,使用针对此类问题进行了优化的array_filter
更容易更好。下面是如何使用您的示例进行操作。Ideone运行代码
<?php
$ar = Array(
"form1" => Array
(
"hash" => 'lFfKBKiCTG6vOQDa8c7n',
"time" => '1401067044'
),
"form5" => Array
(
"hash" => 'TTmLVODDEkI1NrRnAbfB',
"time" => '1401063352'
),
"form4" => Array
(
"hash" => 'XCVOvrGbhuqAZehBmwoD',
"time" => '1401063352'
)
);
$condition = '1401067044';
$newArray = array_filter($ar, function($form) use ($condition) {
if (!isset($form['time'])) {
return true;
}
return $form['time'] != $condition;
});
var_export($newArray);
array_filter
假设您的值存储在$_SESSION
foreach($_SESSION as $key => $value) {
if(isset($value['time']) && $value['time'] < 1401063352) {
unset($_SESSION[$key]);
}
}
如果你将你的值存储在$_SESSION中,你可能想要考虑将它们存储在像$_SESSION['myForms']这样的子字段中,所以如果你需要在你的会话中添加其他值,你可以很容易地只访问你需要的值。
你需要做
unset($_SESSION[$key])
然而,正如Victory所提到的,array_filter
可能是一个更好的方法。