我在自定义字段中有一些值:
save_post = "1200"
或者它可能是,因为我最终需要一个列表:
save_post = "1200, 1460, 1334"
现在,当我加载页面时,我会收到这些values
并将其设置为input field
,我还会添加current value id
中的current page
:
$allPosts = $userPosts.", ".$postid;
$userPosts
是自定义字段中的单个值或值列表,$postid
是我要添加的当前页面ID。
结果是:
<input type="text" value="1200, 23138, 23138, 23138">
每次点击更新提交按钮时,我总是会获得重复值,因为页面会自动刷新:
<form id="saveId" action="" method="POST" class="" autocomplete="off">
<input type="text" name="save_post_value" value="<?php echo $userPosts.", ".$postid; ?>">
<button type="submit" class="save_post btn btn-danger">Update</button>
</form>
如何检查输入中是否已存在值,如果是,请不要回显它?
一种方法是将它们放在Array
中,然后在input field
unique array
中输出,不确定是否有更短的方式。
尝试:
$allPosts = array($userPosts.", ".$postid);
$allPosts = array_unique($allPosts);
<input type="text" name="save_post_value" value="<?php foreach ($allPosts as $value) { echo $value; } ?>">
此外:
$allPosts = array($userPosts.", ".$postid);
$allPosts = array_unique($allPosts);
$allPosts = explode(", ", $allPosts);
<input type="text" name="save_post_value" value="<?php echo $allPosts; ?>"
并尝试使用implode()
:
$allPosts = array($userPosts.", ".$postid);
$allPosts = array_unique($allPosts);
$allPosts = implode(", ", $allPosts);
<input type="text" name="save_post_value" value="<?php echo $allPosts; ?>"
答案 0 :(得分:1)
这是一个非常基本的例子,但我认为这对您的需求很有用:
<?php
// Input data
$userPosts = '19000, 23138, 23138';
$postid = '23138';
// With array
$userPosts = str_replace(' ', '', $userPosts);
if (empty($userPosts)) {
$a = array();
} else {
$a = explode(',', $userPosts);
}
$a = array_unique($a, SORT_STRING);
if (in_array($postid, $a) === false) {
$a[] = $postid;
}
$userPosts = implode(', ', $a);
echo 'Result using array: '.$userPosts.'</br>';
?>
<强>更新强>
可以使用功能。使用empty()
检查空帖子。
<?php
function getUniquePosts($xposts, $xid) {
$xposts = str_replace(' ', '', $xposts);
if (empty($xposts)) {
$a = array();
} else {
$a = explode(',', $xposts);
}
$a = array_unique($a, SORT_STRING);
if (in_array($xid, $a) === false) {
$a[] = $xid;
}
$xposts = implode(', ', $a);
$xposts = ltrim($xposts, ",");
return $xposts;
}
$userPosts = '19000, 23138, 23138';
$postId = '23138';
echo getUniquePosts($userPosts, $postId).'</br>';
?>
然后在加载表单时,您可以尝试:
...
$a = array_unique($a, SORT_STRING);
...
update_user_meta($user_id, 'save_post', getUniquePosts($a, $user_id));
答案 1 :(得分:0)
以下是我提交后检查重复值的代码:
$userPosts = '19000, 23138, 23138';
$postid = '23138';
$pattern = "/(?:^|\W)".$postid."(?:$|\W)/";
if(preg_match($pattern, $userPosts, $matches))
{
print 'There is a duplicate '.rtrim($matches[0] , ",");
}
基本上我重用Zhorov的变量但是在他的方法中他将它放在一个数组中,然后检查该数组是否包含提交的值,我的方法几乎与他的方法相同,而不是将它放在一个数组中;我使用正则表达式来确定字符串中是否存在该值。