PHP-更新或创建多维数组
在我的代码中,我检查两个变量是否为false。如果两者都为false,那么我想用该值更新名为responseArray的数组。如果两个变量都为false,我无法确定如何在不覆盖值的情况下更新数组两次。这用于捕获用户名和电子邮件地址是否已注册 代码如下:PHP-更新或创建多维数组,php,json,Php,Json,在我的代码中,我检查两个变量是否为false。如果两者都为false,那么我想用该值更新名为responseArray的数组。如果两个变量都为false,我无法确定如何在不覆盖值的情况下更新数组两次。这用于捕获用户名和电子邮件地址是否已注册 代码如下: if($usernameAvailable == false) { /*Update validation error array that username taken*/ if(isset($responseA
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。谢谢!尽管它修改了数组的结构,但这确实起到了作用。将等待史蒂夫分享他的观点。如果没有,那么我会选择这个作为答案,因为它解决了问题。没问题,伙计!