PHP:初始化关联数组字段并向其追加文本-事先不知道键值
我想提高resp。缩短我初始化关联数组字段并向其添加文本的编程风格 我多年来的做法,例如:PHP:初始化关联数组字段并向其追加文本-事先不知道键值,php,associative-array,Php,Associative Array,我想提高resp。缩短我初始化关联数组字段并向其添加文本的编程风格 我多年来的做法,例如: foreach($tagsArray as $tag) { if(!isset($mainArray[$tag])) { $mainArray[$tag] = '<li>'.$tag.'</li>'; } else { $mainArray[$tag] .= '<li>'.$tag.'</li>';
foreach($tagsArray as $tag) {
if(!isset($mainArray[$tag])) {
$mainArray[$tag] = '<li>'.$tag.'</li>';
}
else {
$mainArray[$tag] .= '<li>'.$tag.'</li>';
}
}
foreach($tagsArray作为$tag){
如果(!isset($mainArray[$tag])){
$mainArray[$tag]='。$tag' ';
}
否则{
$mainArray[$tag]。=''.$tag'. ';
}
}
只是感觉太长了
有人能给我一个捷径吗?我们是否可以直接初始化而不检查isset
谢谢 您可以将html部分移出if循环:
foreach($tagsArray as $tag) {
if(!isset($mainArray[$tag])) {
$mainArray[$tag] = '';
}
$mainArray[$tag] .= '<li>'.$tag.'</li>';
}
foreach($tagsArray作为$tag){
如果(!isset($mainArray[$tag])){
$mainArray[$tag]='';
}
$mainArray[$tag]。=''.$tag'. ';
}
然后,您可以通过为if使用一行代码来缩短它:
foreach($tagsArray as $tag) {
if(!isset($mainArray[$tag])) $mainArray[$tag] = '';
$mainArray[$tag] .= '<li>'.$tag.'</li>';
}
foreach($tagsArray作为$tag){
如果(!isset($mainArray[$tag]))$mainArray[$tag]='';
$mainArray[$tag]。=''.$tag'. ';
}
您可以使用PHP:
编辑:在发布OP时,OP指定
$tagArray
包含唯一值,发布此答案后,我了解到可能存在重复值。我把这个答案留在这里,以防有用,或者用作起点
由于
$mainArray
为空,并且如果$tagsArray
包含唯一值:
$tagsArray = array("first","second","third");
$tagsTextArray = array_map(function($tag) {
return "<li>".$tag."</li>";
},
$tagsArray);
$mainArray = array_combine($tagsArray, $tagsTextArray);
var_dump($mainArray);
$tagsArray=数组(“第一”、“第二”、“第三”);
$tagsTextArray=数组\映射(函数($tag){
返回“”$tag. ”;
},
$tagsArray);
$mainArray=array\u combine($tagsArray,$tagsTextArray);
变量转储($mainArray);
返回
array(3) {
["first"]=>
string(14) "<li>first</li>"
["second"]=>
string(15) "<li>second</li>"
["third"]=>
string(14) "<li>third</li>"
}
数组(3){
[“第一”]=>
字符串(14)“第一个”
[“秒”]=>
字符串(15)“ 秒”
[“第三”]=>
字符串(14)“ 第三个”
}
如果你愿意,你可以把它做成一行,但是你会失去可读性。你可以使用。例如:
foreach($tagsArray as $tag) {
$mainArray[$tag] = isset($mainArray[$tag])
? $mainArray[$tag] . '<li>' . $tag . '</li>' // if(isset($mainArray[$tag])), prepend it.
: '<li>' . $tag . '</li>';
}
foreach($tagsArray作为$tag){
$mainArray[$tag]=isset($mainArray[$tag])
?$mainArray[$tag].'.$tag. '//if(isset($mainArray[$tag]),在它前面加上前缀。
:“”.$tag.“ ”;
}
在进入foreach循环之前,您能否显示$mainArray
包含的内容的示例?$mainArray
之前为空<代码>$mainArray=array()和$tagsArray
包含多个标记(字符串)。$tagsArray可以包含重复的值,还是唯一的?$tagsArray
不包含唯一的值。非常抱歉,它不包含唯一的值。是我的错。上述评论已更改。但是,您可以将您的答案留给具有相同问题但唯一值的其他人。好的,我已经编辑了我的答案,以指定它适用于唯一的标记数组。这对我来说很好,尽管仍然存在isset检查。我想到了()?:但是,操作员没有想到在:
之后再添加$mainArray[$tag],如果没有isset()检查,您将立即看到未定义的索引,我想有人知道解决方法。一种简写符号,它可以做到这一点。我怀疑,由于您试图使用不存在的键附加到数组成员,因此可以使用@sign或通过将error_reporting()设置为error_reporting(E_ALL^E_NOTICE)来抑制错误通知代码>,但最好不要有错误,而不要抑制错误。哦,该死。。已由@Danijel回答。弱连接。
array(3) {
["first"]=>
string(14) "<li>first</li>"
["second"]=>
string(15) "<li>second</li>"
["third"]=>
string(14) "<li>third</li>"
}
foreach($tagsArray as $tag) {
$mainArray[$tag] = isset($mainArray[$tag])
? $mainArray[$tag] . '<li>' . $tag . '</li>' // if(isset($mainArray[$tag])), prepend it.
: '<li>' . $tag . '</li>';
}