PHP-更新或创建多维数组

PHP-更新或创建多维数组,php,json,Php,Json,在我的代码中,我检查两个变量是否为false。如果两者都为false,那么我想用该值更新名为responseArray的数组。如果两个变量都为false,我无法确定如何在不覆盖值的情况下更新数组两次。这用于捕获用户名和电子邮件地址是否已注册 代码如下: if($usernameAvailable == false) { /*Update validation error array that username taken*/ if(isset($responseA

在我的代码中,我检查两个变量是否为false。如果两者都为false,那么我想用该值更新名为responseArray的数组。如果两个变量都为false,我无法确定如何在不覆盖值的情况下更新数组两次。这用于捕获用户名和电子邮件地址是否已注册

代码如下:

if($usernameAvailable == false)
    {
      /*Update validation error array that username taken*/
      if(isset($responseArray['ErrorArray']['Validation']))
      {
        /*Already another validation error exist in the array, add to it*/
        $utilitiesInstance->array_push_assoc($responseArray['ErrorArray']['Validation'], "Username", "Username Already Taken");
      }else{
        /*No array with validation errors is created...create it.*/
        $responseArray = array("ErrorArray"=>array("Validation"=>array("Username"=>"Username Already Taken")), "requestSuccessful"=>false);
      }
    }

    if($emailAvailable == false)
    {
      /*Update validation error array that Email already registered*/
      if(isset($responseArray['ErrorArray']['Validation']))
      {
        /*Already another validation error exist in the array, add to it*/
        $utilitiesInstance->array_push_assoc($responseArray['ErrorArray']['Validation'], "Email", "Email Already Registered");
      }else{
        /*No array with validation errors is created...create it.*/
        $responseArray = array("ErrorArray"=>array("Validation"=>array("Email"=>"Email Already Registered")), "requestSuccessful"=>false);
      }
    }
当我输入用户名和电子邮件时,如果两者都出现错误,我得到的是以下输出:

{“ErrorArray”:{“Validation”:{“Username”:“Username已存在” 获取“}”,请求成功:false}

但它也应该在上面的验证数组中包含电子邮件项目,因为这也是错误的。这正是我希望在此场景中作为输出的内容:

{“ErrorArray”:{“Validation”:{“Username”:“Username已使用”, “电子邮件”:“电子邮件已注册”}},“请求成功”:false}

以下是我用于函数array_push_assoc()的代码,以防万一:

function array_push_assoc($array, $key, $value){
    $array[$key] = $value;
    return $array;
  }

数组推送方法返回传递给它的数组的副本,它对原始数组没有影响
$responseArray

要修复此问题,请更改方法以引用阵列并进行适当更改:

function array_push_assoc_inplace(&$array, $key, $value)
{
    $array[$key] = $value;
}
但是,大多数代码似乎都是不必要的,您可以简单地使用以下代码获得相同的结果:

if($usernameAvailable == false){
    $responseArray['ErrorArray']['Validation']['Username']='Username Already Taken';
}
if($emailAvailable == false){
    $responseArray['ErrorArray']['Validation']['Email']='Email Already Registered';
}
试试这个伴侣:

if($usernameAvailable == false) {
    $responseArray['ErrorArray']['Validation'][] = array("Username"=>"Username Already Taken");
    $responseArray['ErrorArray']['requestSuccessful'] = false;
}

if($emailAvailable == false) {
    $responseArray['ErrorArray']['Validation'][] = array("Email"=>"Email Already Registered");
    $responseArray['ErrorArray']['requestSuccessful'] = false;
}

如果我这样做,我会得到这个数组:{“Username”:“Username ready take”,“Email”:“Email ready registed”},它丢失了大部分结构needed@ksjg编辑。虽然这仍然可以提高很多,我会用一个更好的方法进行另一次编辑。我会等待更好的方法,因为上面的方法只返回null。感谢您帮助我们解决返回null的问题?我修改了代码以使用上面定义的新函数,但是返回值为null。谢谢!尽管它修改了数组的结构,但这确实起到了作用。将等待史蒂夫分享他的观点。如果没有,那么我会选择这个作为答案,因为它解决了问题。没问题,伙计!