如何取消设置动态生成的多维数组



我试图删除一个数组,其中一个值…(时间)满足特定条件。我目前正在使用的代码看起来像这样:

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可能是一个更好的方法。

相关内容

  • 没有找到相关文章