好的,我会在这里解释一下我想要实现的内容。这就像数字搜索。我将传递一个数字,服务器返回一个所有数字的数组。如果传递的数字存在,我将不得不从数组中弹出该数字。
它可以工作,但不适用于所有情况。
<?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"}
我不知道为什么会这样。 任何人都可以帮我弄清楚这段代码有什么问题吗?
答案 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))