根据数组中的值取消设置特定会话项

Posted

技术标签:

【中文标题】根据数组中的值取消设置特定会话项【英文标题】:Unset a specific session item based on value inside an array 【发布时间】:2019-03-15 02:44:20 【问题描述】:

问题:

我有一个由多个数组组成的会话变量,每个数组都有一组值。我希望取消设置与会话数组中特定变量的值匹配的特定数组。

会话构建:

PHP 代码:

$key = array_search($answers['evaluationnumber'], $_SESSION['stimuli']);

if ($key !== false) 
  unset($_SESSION['stimuli'][$key]);
  $_SESSION['stimuli'] = array_values($_SESSION['stimuli']);

我已经仔细检查并从变量$answers['evaluationnumber'] 中得到值3841

问题:

如何开始挖掘数组列表以取消设置特定键?

期望的输出:

能够根据变量$answers['evaluationnumber'] 中给出的值删除会话数组中名为stimuli 的数组。

【问题讨论】:

但是在会话构造中,键是evaluationsnumber 而不是evaluationnumber 你能不能在$_SESSION['stimuli'] 数组中出现不止一次的数组 @Azhy 我明白了 - 我如何搜索每个数组以找到与我在变量中的一个匹配的评估号? @RiggsFolly 不,它总是只出现一次。 【参考方案1】:

如果您只想检查会话中针对$answers['evaluationnumber'] 的具体发生情况,并且正如您所说,$_SESSION['stimuli'] 中只会出现一次子数组,这似乎是最简单的方法。

if ( $_SESSION['stimuli'][0]['evaluationsnumber'] == $answers['evaluationnumber'] ) 
    unset($_SESSION['stimuli'][0]);

【讨论】:

然而,这将删除整个数组,我只对删除与 evaluationsnumber 值匹配的特定数组感兴趣。 我承认我现在并没有完全按照你的要求,所以我添加了另外两种可能性 我澄清说这是需要取消设置的特定数组,因此它将是您的三个示例中的第二个。 删除了选项 1 和 3。这是你想做的吗?【参考方案2】:

你应该看看 phparray_filter 函数。

它需要一个数组和一个过滤器函数。 此过滤器函数将处理原始数组的每个元素。在那里检查您想要的密钥。

如果您在该函数中返回true,则最终数组将包含该元素,如果false 将被排除。文档中有一个simple example。

【讨论】:

以上是关于根据数组中的值取消设置特定会话项的主要内容,如果未能解决你的问题,请参考以下文章

如何取消设置嵌套 foreach 中的特定数组?

根据父项中的值按 Id 查找子文档

根据php中的另一个数组值取消设置一个数组?

如何根据特定行中的值对 numpy 数组进行排序?

php检查数组中的特定值是不是包含大于0的值[重复]

通过取消引用更改 NSArray 中的值?