我目前正在制作一个系统,用户可以在这个系统中将东西发布到一个表中,该系统会自动添加一个“Day-”.date(“N”)到表上的字符串中,一旦一周后,我就会删除它。我已经完成了实现这个任务的流程--每当用户添加一个post时,它都会检查一个day.txt文件,看看当天是否是不同的一天,如果是的话,它将运行以下函数:
// The function is quite simple in theory:
// Load the two lists as a string, convert to array
// Send code out removing all posts with a certain day.
function removeOldPosts(){
$newday = ':Day-'.date('N');
// I realise the below two lines are unefficient, I'll consolidate them later
$currentPosts = file_get_contents('list.txt');
$posts = explode(" ", $currentPosts);
while(($key = array_search($newday, $posts)) !== false){
unset($posts[$key]);
echo 'Unset a value: '.$key.'<br>';
}
echo ($posts); // Testing variables in array
$newPosts = implode(" ", $posts);
echo $newPosts;
file_put_contents('list.txt', $newPosts);
return;
}然而,“回声”仍然显示为包含我要删除的值.我想知道是否有人在我的代码中发现了错误--我假设while语句有问题,但这是我第一次使用这样的语句,所以我不完全确定如何有效地找到包含当前日期的所有值,然后删除它们。
对于"list.txt“内容,如下所示
1:Spitfire:Day-4:8JX-UKR8:8JX-UKR8:Spirit:110 1:Spitfire:Day-4:8JX-UKR8:8JX-UKR8:Spirit:110 1:Spitfire:Day-4:8JX-UKR8:8JX-UKR8:Spirit:110 1:Spitfire:Day-4:8JX-UKR8:8JX-UKR8:Spirit:110 1:Spitfire:Day-4:8JX-UKR8:8JX-UKR8:Spirit:1101:Spitfire:Day-4:8JX-UKR8:8JX-UKR8:Spirit:110 1:Spitfire:Day-4:8JX-UKR8:8JX-UKR8:Spirit:110 1:Spitfire:Day-4:8JX-UKR8:8JX-UKR8:Spirit:110任何帮助都将不胜感激!
发布于 2014-06-19 14:47:13
如果要清理数组,请尝试使用过滤器。此示例将删除所有带有“:Day-4”子字符串的条目。
$currentPosts = '1:Spitfire:Day-4:8JX-UKR8:8JX-UKR8:Spirit:110 1:Spitfire:Day-5:8JX-UKR8:8JX-UKR8:Spirit:110 1:Spitfire:Day-6:8JX-UKR8:8JX-UKR8:Spirit:110 1:Spitfire:Day-3:8JX-UKR8:8JX-UKR8:Spirit:110 1:Spitfire:Day-4:8JX-UKR8:8JX-UKR8:Spirit:110 1:Spitfire:Day-4:8JX-UKR8:8JX-UKR8:Spirit:110 1:Spitfire:Day-5:8JX-UKR8:8JX-UKR8:Spirit:110 1:Spitfire:Day-4:8JX-UKR8:8JX-UKR8:Spirit:110';
$posts = explode( " ", $currentPosts );
$posts = array_filter( $posts, function( $item ) {
return strpos( $item, ':Day-4' ) === false;
});
print_r( $posts );https://stackoverflow.com/questions/24309068
复制相似问题