【问题标题】:Array Search in PHPPHP中的数组搜索
【发布时间】:2018-01-13 13:07:40
【问题描述】:

我想在我的 SESSION 中搜索一些内容。我认为它是一个数组。当我打印$_SESSION["basket"] 时,输出将是:

[
    ["6"],
    ["5"],
    ["8"]
]

这些数字是产品 ID。我想在这个输出上搜索 id。我该怎么做?

例如:我想在[["6"],["5"],["8"]] 中搜索8,那么输出为真。

【问题讨论】:

  • 寻找in_array()
  • 我试过这个,但它不适用于我的代码...@Mihai
  • 那么你需要显示数组的实际输出和实际代码。 print_r()var_dump().
  • 如果 in_array 不起作用,我们需要查看您的实际代码。
  • @TMartin: in_array 不起作用,因为他的值在子数组中。

标签: php arrays session


【解决方案1】:

in_array 不起作用的原因是因为您的值 658 存储在主数组的另一个数组中。

所以要搜索一个值,你可以用一个函数遍历每个数组:

非递归(1 级深度搜索)

function searchInArray($array, $value){
    // If the array parameter is not an array and the value parameter is an array, return false
    if(!is_array($array) || is_array($value))
        return false;

    // If the value is found in the main array, return true
    if(in_array($value, $array))
        return true;

    // Loop through each subarray
    foreach($array as $subarray){
        if(in_array($value, $subarray))
            return true;
    }        
}

假设这是你的数组:

$array = [[6], [5], [8]];

如果我们用var_dump(searchInArray($array, 8)); var_dump 结果:

bool(true)

递归(无限深度搜索)

使用此函数,它将在每个子数组中搜索...这是一个recursive function

function recursiveSearch($array, $value){
    // If the array parameter is not an array and the value parameter is an array, return false
    if(!is_array($array) || is_array($value))
        return false;

    // If the value is found in the main array, return true
    if(in_array($value, $array))
        return true;

    // Loop through each subarray and make a recursive call
    foreach($array as $subarray){
        if(recursiveSearch($subarray, $value))
            return true;
    }

    return false;
}

所以我们假设这次是你的数组:

$array = [[6], [5], [8, [9]]];

结果:

var_dump(recursiveSearch($array, 4)); // false
var_dump(recursiveSearch($array, 8)); // true
var_dump(recursiveSearch($array, 9)); // true

【讨论】:

  • 首先,感谢您的回答,但我的输出是 bool(false),可能是因为 "" 引号...实际上,我想搜索并删除我搜索的内容...
  • 我的代码:var_dump(searchInArray($_SESSION["basket"], 8));
  • $_SESSION['basket'] 的值是多少?
  • [["6"],["5"],["8"]] 这是$_SESSION['basket']的值
  • @MeturJohn 我刚试过这个:$_SESSION['basket'] = [["6"],["5"],["8"]]; var_dump(searchInArray($_SESSION['basket'], 8));,它返回了 true。您确定您的$_SESSION['basket'] 具有正确的值吗?
【解决方案2】:

解决方案可以简单得多,因为您的 id 值都存在于多维数组的单列中。使用array_column() 从第一列值生成一维数组,然后在数组上调用in_array()

代码:(演示:https://3v4l.org/UN6PZ

$_SESSION['basket']=[["6"],["5"],["8"]];
var_export(in_array('8',array_column($_SESSION['basket'],0)));

输出:

true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    相关资源
    最近更新 更多