Php 比较数组中的差异并添加不存在的键 熟悉情况
让我们假设我们要使用以下结构遍历错误消息的多维数组Php 比较数组中的差异并添加不存在的键 熟悉情况,php,multidimensional-array,array-difference,Php,Multidimensional Array,Array Difference,让我们假设我们要使用以下结构遍历错误消息的多维数组$errors …并将其与一系列已发布的语言版本进行比较: 此外,还有一种默认语言。这是主要和首选语言: 目标 我所需要做的就是找出任何错误是否不包含任何语言版本,除了默认版本。 我认为一种方法是使用函数array\u diff()或该函数的一些快照。但是现在我有以下循环代码,如果有更好的建议,我将不胜感激: 所需结果: array(2) { ["app_cannot_run"]=> array(2) { ["ces"]=&g
$errors
…并将其与一系列已发布的语言版本进行比较:
此外,还有一种默认语言。这是主要和首选语言:
目标 我所需要做的就是找出任何错误是否不包含任何语言版本,除了默认版本。 我认为一种方法是使用函数
array\u diff()
或该函数的一些快照。但是现在我有以下循环代码,如果有更好的建议,我将不胜感激:
所需结果:
array(2) {
["app_cannot_run"]=> array(2) {
["ces"]=> string(36) "Webová aplikace nemůže být spuštěna."
["eng"]=> string(39) "The web application can not be started."
}
["missing_file"]=> array(2) {
["ces"]=> string(32) "Požadovaný soubor nebyl nalezen."
["eng"]=> string(32) "Požadovaný soubor nebyl nalezen."
}
}
对不起,我的英语,所有读到这里的人,谢谢你们的耐心!☺
如果你不明白我问题的某些部分,请告诉我。来解围:
$default_lang = 'ces';
$availables = array('ces','eng');
$result = array_map(function($el) use($default_lang, $availables) {
foreach($availables as $lang) {
if(!array_key_exists($lang, $el)) { // no translation!
$el[$lang] = $el[$default_lang]; // set to copy of default
}
}
return $el; // return updated
}, $arr);
希望这能有所帮助。您好,首先感谢您的回复。不幸的是,我不得不说它没有帮助,因为我仍然有一个没有补充元素的数组。我不知道为什么,但我继续检查它。你确定你检查了
$result
var,而不是原始$arr
?你是对的!非常感谢你!你刚刚救了我的青春☺很顺利,很好。
$default_language = 'ces';
foreach ($errors as $e => $id){
foreach ($available_languages as $l){
if (!array_key_exists($l,$id)){
if ($l != $default_language){
$alt_err_ver = $id[$default_language];
$id[$l] = $alt_err_ver;
/*
here comes a problem because I can save an alternative
language version of error into an array, but only for
an iteration (it's not going to printed after foreach loop).
*/
}
}
}
}
print_r($errors);
array(2) {
["app_cannot_run"]=> array(2) {
["ces"]=> string(36) "Webová aplikace nemůže být spuštěna."
["eng"]=> string(39) "The web application can not be started."
}
["missing_file"]=> array(2) {
["ces"]=> string(32) "Požadovaný soubor nebyl nalezen."
["eng"]=> string(32) "Požadovaný soubor nebyl nalezen."
}
}
$default_lang = 'ces';
$availables = array('ces','eng');
$result = array_map(function($el) use($default_lang, $availables) {
foreach($availables as $lang) {
if(!array_key_exists($lang, $el)) { // no translation!
$el[$lang] = $el[$default_lang]; // set to copy of default
}
}
return $el; // return updated
}, $arr);