【问题标题】:delete an element of given key of array in php在php中删除给定数组键的元素
【发布时间】:2017-11-17 16:53:40
【问题描述】:
    $nesAry=array();
$nesAry["name"]="abc";
$nesAry["email"]="abc@email.com";

$nesAry1=array();
$nesAry1["name"]="abc1";
$nesAry1["email"]="abc1@email.com";

$nesAry2=array();
$nesAry2["name"]="abc2";
$nesAry2["email"]="abc2@email.com";


$responseAry = array();
$responseAry[0]=$nesAry;
$responseAry[1]=$nesAry1;
$responseAry[2]=$nesAry2;


echo json_encode($responseAry); // here  output like this => [{"name":"abc","email":"abc@email.com"},{"name":"abc1","email":"abc1@email.com"},{"name":"abc2","email":"abc2@email.com"}]

unset($responseAry[1]);

echo "------------removed 1--------";


echo json_encode($responseAry); // but here output like this => {"0":{"name":"abc","email":"abc@email.com"},"2":{"name":"abc2","email":"abc2@email.com"}}

我想在删除一个元素后像这样输出 \n [{"name":"abc","email":"abc@email.com"},{"name":"abc2", "电子邮件":"abc2@email.com"}]

请帮帮我

【问题讨论】:

标签: php


【解决方案1】:

您的数组在第一次转换为 json 时是一个所谓的“关联”数组,然后 json_encode 将其导出到您在第一个回显中看到的对象。

在您取消设置后,该数组将更改为“数字”数组,并且 json_encode 将使用数组键导出该数组。

php 它自己不关心数组的使用方式,但是 json_encode 关心。

你可以使用

echo json_encode(array_values($responseAry));

或者不更改要导出的最终数组

【讨论】:

    【解决方案2】:

    尝试在取消设置项目后重新生成数组:

    $nesAry=array();
    $nesAry["name"]="abc";
    $nesAry["email"]="abc@email.com";
    
    $nesAry1=array();
    $nesAry1["name"]="abc1";
    $nesAry1["email"]="abc1@email.com";
    
    $nesAry2=array();
    $nesAry2["name"]="abc2";
    $nesAry2["email"]="abc2@email.com";
    
    
    $responseAry = array();
    $responseAry[0]=$nesAry;
    $responseAry[1]=$nesAry1;
    $responseAry[2]=$nesAry2;
    
    
    echo json_encode($responseAry); // __here  output like this => [{"name":"abc","email":"abc2@email.com"},{"name":"abc1","email":"abc1@email.com"},{"name":"abc2"}]__
    
    unset($responseAry[1]);
    
    $responseAry = array_values($responseAry); //regenerate array(reindexing)
    
    echo "------------removed 1--------";
    
    
    echo json_encode($responseAry); //[{"name":"abc","email":"abc@email.com"},{"name":"abc2","email":"abc2@email.com"}]
    

    编辑:

    作为其他选项,您可以使用array_splice 方法http://php.net/manual/en/function.array-splice.php

    $nesAry=array();
    $nesAry["name"]="abc";
    $nesAry["email"]="abc@email.com";
    
    $nesAry1=array();
    $nesAry1["name"]="abc1";
    $nesAry1["email"]="abc1@email.com";
    
    $nesAry2=array();
    $nesAry2["name"]="abc2";
    $nesAry2["email"]="abc2@email.com";
    
    
    $responseAry = array();
    $responseAry[0]=$nesAry;
    $responseAry[1]=$nesAry1;
    $responseAry[2]=$nesAry2;
    
    
    echo json_encode($responseAry); // __here  output like this => [{"name":"abc","email":"abc2@email.com"},{"name":"abc1","email":"abc1@email.com"},{"name":"abc2"}]__
    
    array_splice($responseAry,1,1);
    echo "------------removed 1--------";
    
    
    echo json_encode($responseAry);
    

    【讨论】:

    • 还有其他选择吗?
    • 非常感谢您的回答