【问题标题】:Array_search malfunctioning?Array_search 出现故障?
【发布时间】:2012-07-23 12:35:06
【问题描述】:

前几行只是为了仔细检查所有变量是否符合要求。他们都给出了正确的数据。

print_r($stack) 确实给出了上述数组元素,(+ 和更多元素)

<?php
$item_name = $_POST['item_name']; 
echo $item_name.'<br/><br/>'; // IBM-3246785
print_r($stack);   // Array ( [0] => IBM-3246785 [1] => IBM-3567465 [2] => IBM-4579645 [3] => [4] => IBM-1234567 [5] => [6] => IBM-12345678 [7] => [8] => IBM-24374365 )            

$key = array_search($item_name, $stack);
if ($key !== false) {
    echo "The key where find was found is:" . $key;
} else{
    echo $item_name . " was NOT FOUND in the array";
};
?>

数组搜索每次都返回错误!!! 尝试用 IBM-3246785 替换 $item_name - 问题仍然存在。 无法让它返回所选“item_name”的索引/键。

【问题讨论】:

    标签: php arrays search indexing return


    【解决方案1】:

    我刚刚在这里运行了这段代码 ---

    <?php
    
    $item_name = "IBM-3246785";
    $stack = Array (0 => 'IBM-3246785', 1 => 'IBM-3567465', 2 => 'IBM-4579645', 3 => 'IBM-1234567',4 => 'IBM-12345678', 5 => 'IBM-24374365');
    
    
    $key = array_search($item_name, $stack);
    if ($key !== false) {
        echo "The key where find was found is:" . $key;
    } else{
        echo $item_name . " was NOT FOUND in the array";
    };
    ?>
    

    它返回了 - 找到 find 的键是:0

    【讨论】:

    • 我唯一的猜测是你的 post 变量中可能有一个空格。试试 $item_name = trim($_POST['item_name']);
    • 确实,我得到了相同的结果。 @op:改用var_dump($stack);。您的值可能包含一些空格。编辑:@dano 所说的也可能是真的,您可能想要这样做,并将 trim() 应用于您的数组值,使用 $stack = array_map('trim', $stack');
    • 它得到了解决。修剪数组和字符串后 - 它起作用了!
    【解决方案2】:

    您可以尝试比较 $item_name 和 $stack[0],例如 if ($item_name == $stack[0]) echo "Done"; 您可以先尝试检查是否为 false,例如 if ($key === false) echo "Not"; else echo "Is"; 也许您可以尝试不同的函数来检索正确的数组键。

    【讨论】:

    • 尝试将 item_name 与 stack[0] 进行比较,结果出错。尽管在修剪数组和字符串之后,它给出了“完成”。它仍然无法正确搜索
    • 它得到了解决。修剪数组和字符串后 - 它起作用了!