PHP if在不完全重建的情况下添加和删除的条件

PHP if在不完全重建的情况下添加和删除的条件,php,if-statement,Php,If Statement,我正在创建一个PostgreSQL表列管理工具,用于快速添加、删除和重新排列表中的列。到目前为止,它在简单的场景中工作得非常好,在这些场景中,我只需在末尾附加一列或删除一个现有列。每个myif条件调用其他函数来追加新列、删除现有列或重建整个表;就我目前所能测试的而言,这些函数工作得非常好 如何创建一个if条件,在该条件下调用append函数和delete函数,而不是rebuild函数 我有几个数组来帮助我确定逻辑,尽管我很难计算出来。这里是列名数组,在这个场景中,我不应该调用rebuild函数,

我正在创建一个PostgreSQL表列管理工具,用于快速添加、删除和重新排列表中的列。到目前为止,它在简单的场景中工作得非常好,在这些场景中,我只需在末尾附加一列或删除一个现有列。每个my
if
条件调用其他函数来追加新列、删除现有列或重建整个表;就我目前所能测试的而言,这些函数工作得非常好

如何创建一个
if
条件,在该条件下调用append函数和delete函数,而不是rebuild函数

我有几个数组来帮助我确定逻辑,尽管我很难计算出来。这里是列名数组,在这个场景中,我不应该调用rebuild函数,需要调用append函数和delete函数

在这个场景中,我要做的就是删除列
id\u 2
并添加列
id\u 4
,这样就不需要重新排列顺序或列

$columns\u db-PostgreSQL数据库中存在的列

Array
(
    [0] => id
    [1] => id_1
    [2] => id_2
    [3] => id_3
)
$columns\u已更新-我们将保留的数据库中的列

Array
(
    [0] => id
    [1] => id_2
    [2] => id_3
)
$columns\u submitted-完成所有操作后列的最终显示方式

Array
(
    [0] => id
    [1] => id_2
    [2] => id_3
    [3] => id_4
)
$columns\u切片

$columns_slice = array_slice($columns_submitted,0,(count($columns_updated) - 1),true);

Array
(
    [0] => id
    [1] => id_2
)
$columns\u删除将被删除的列

Array
(
    [1] => id_1
)
$columns\u追加-将创建的列

Array
(
    [id_4] => bigint
)

我通常更喜欢直接的
if
/
或者if
条件,尽管它看起来太复杂了,无法维护@Abracadver很明智地将添加/删除检测分开,我对其进行了调整(如果不删除它的话,我会投赞成票)。我已经测试了十几种复杂的组合,没有发现任何误报。以下是我用来帮助可视化逻辑的调试版本:

$rebuild = 0;
foreach ($columns_append as $k1 => $v1)
{
 //echo '<div class="clear">k1 = '.$k1.'</div>';
 if (in_array($k1,$columns_slice)) {$rebuild = 1; break;}
 else
 {
  $columns_submitted_key = array_search($k1,$columns_submitted);
  //echo '<div class="clear">columns_submitted_key: '.$columns_submitted_key.', $columns_updated count = '.count($columns_updated).'</div>';
  if ($columns_submitted_key<count($columns_updated)) {$rebuild = 1; break;}//echo '<div class="error">Yeah, rebuild here.</div>';
 }
}

if ($rebuild>0) {echo '<div class="clear">1, rebuild.</div>';}
else
{
 if (count($columns_append)>0) {echo '<div class="clear">2,append</div>';}
 if (count($columns_remove)>0) {echo '<div class="clear">3,delete</div>';}
}
$rebuild=0;
foreach($k1=>$v1追加列)
{
//回显'k1='。$k1';
如果(在数组中($k1,$columns\u slice)){$rebuild=1;break;}
其他的
{
$columns\u submitted\u key=数组搜索($k1,$columns\u submitted);
//回显“columns_submitted_key:”.$columns_submitted_key.”,$columns_updated count=”。count($columns_updated)。“”;
如果($columns_submitted_key0){echo'1,rebuild.;}
其他的
{
如果(count($columns_append)>0){echo'2,append';}
如果(count($columns_remove)>0{echo'3,删除';}
}
  • 首先执行列删除
  • 内爆
    删除后的列列表(
    $before=in爆($columns\u updated);
  • 内爆
    添加后的列列表(
    $after=in爆($columns\u submitted)
  • if(strpos($after,$before)==0){/*添加内容在末尾*/}
  • 你一定要小心

    作为一个班轮:

    $rebuild = (strpos(implode($columns_submitted), implode($columns_updated)) !== 0);
    

    你要重建的场景是什么?@Abracadver rebuild是在除了最右边/最后一个位置之外的任何位置插入一个新列。重建功能工作得很好,我只是不想总是调用它。你尝试过我的解决方案吗?有什么反馈吗?@Sonny病了整整一周,刚刚又回到了这个问题上嗯。