php-从数组中弹出一个值会返回错误的结果

时间:2016-07-27 09:21:16

标签: php arrays

好的,我会在这里解释一下我想要实现的内容。这就像数字搜索。我将传递一个数字,服务器返回一个所有数字的数组。如果传递的数字存在,我将不得不从数组中弹出该数字。

它可以工作,但不适用于所有情况。

<?php

function fetchAll()
{
    $data= array();
    $motherArray='["1","48","2","44","4"]';
    $data       =   json_decode($motherArray); 
    return $data;
}

$allIDs=fetchAll();
if (!empty($allIDs)) 
{
    $checkThis=4;
    if(in_array($checkThis,$allIDs))
    {
        if (($key = array_search($checkThis, $allIDs)) !== false) 
        {
            unset($allIDs[$key]);
        }       
        if(!empty($allIDs))
        {       
            $allIDsJSON         = json_encode($allIDs);
            echo $allIDsJSON;
        }
        else
        {
            echo 'empty';
        }           
    }
    else
    {
        echo 'not present';
    }
}

?>

上面给出的是我的代码。我试图搜索数字4。

4号可以处于任何位置。它可以是第一个,中间或最后一个。如果号码在最后位置,我的代码可以工作。然后,它返回正确的输出。

案例1

$motherArray='["1","48","2","44","4"]';

如果它在最后位置,我得到正确的输出:

["1","48","2","44"]

案例2

如果第4号位于任何其他位置

$ motherArray =&#39; [&#34; 1&#34;&#34; 48&#34;&#34; 2&#34;&#34; 4&#34;&#34 ; 44&#34;]&#39 ;;

然后我得到的输出是:

{"0":"1","1":"48","2":"2","4":"44"}

我不知道为什么会这样。 任何人都可以帮我弄清楚这段代码有什么问题吗?

2 个答案:

答案 0 :(得分:0)

如果您的号码有多个值,您的代码将无法运作:

foreach (array_keys($allIDs, $checkThis) as $key) unset($allIDs[$key]);

答案 1 :(得分:0)

评论中已经提供了正确答案。我将在此处添加一些解释。

如果数字不在最后位置,那么当你unset($allIDs[$key]);创建一个不连续的数组时。

原始阵列: Array ( [0] => 1 [1] => 48 [2] => 2 [3] => 4 [4] => 44 )

取消设置第三个元素后的数组:Array ( [0] => 1 [1] => 48 [2] => 2 [4] => 44 )

因为在javascript中使用json_encode($allIDs);时没有关联数组,所以获得的有效JSON结果是JSON对象而不是数组。

因此,如果你想要一个数组,你必须自己重新索引数组:

$indexed_array = array();

foreach ($allIDs as $row) {
    $indexed_array[] = $row;
}

json_encode($indexed_array);

或使用array_values功能

echo json_encode(array_values($allIDs))