好的,不太确定如何做到这一点。我正在从SQL查询输出,像这样的值:数组,需要通过键排序
$row[0] = array('lid' => 1, 'llayout' => 1, 'lposition' => 1, 'mid' => 1, 'mlayout' => 1, 'mposition' => 0);
$row[1] = array('lid' => 2, 'llayout' => 1, 'lposition' => 0, 'mid' => 2, 'mlayout' => 1, 'mposition' => 0);
$row[2] = array('lid' => 2, 'llayout' => 1, 'lposition' => 0, 'mid' => 3, 'mlayout' => 1, 'mposition' => 1);
$row[3] = array('lid' => 3, 'llayout' => 1, 'lposition' => 1, 'mid' => 4, 'mlayout' => 1, 'mposition' => 1);
$row[4] = array('lid' => 4, 'llayout' => 1, 'lposition' => 2, 'mid' => 5, 'mlayout' => 1, 'mposition' => 0);
等等,等等
好了,我能想到的,这是给盖和中数组键的最好的事情,拥有它等于mposition到像这样的查询的while循环中的数组...
$old[$row['lid']][$row['mid']] = $mposition;
现在,如果我这样做,我需要这个数组的键与另一个数组,我需要构建基于比较在$ _POST数组[]上。
$new = array();
foreach($_POST as $id => $data)
{
// $id = column, but we still need to get each rows position...
$id = str_replace('col_', '', $id);
// now get the inner array...
foreach($data as $pos => $idpos)
$new[$id][$idpos] = $pos;
}
好了,现在我有2个阵列信息,1从数据库($旧),而另一个来自$ _ POST位置($新),我希望我得到的数组键是正确的。
现在我需要弄清楚哪一个已经改变了,比较从旧到新。此外,还需要更新数据库,使用新盖子=旧盖子以及每个阵列的新中间=旧中间的所有新位置。我敢肯定,我将不得不使用array_key或array_key_intersect,但不知道如何... ???
此外,我不认为一个更新会在foreach循环中有用,也许有办法在UPDATE查询中执行一个CASE语句?
另外,我是否正在以正确的方式进行?或者我应该以另一种方式来做,而不是为此使用多维数组。
基本上我需要更新数据库中的每个数组在同一个键=更改值,我需要更新它在数据库中mid = mid(第二个键值)。
而且,我觉得这有点儿像这样:
$newest = array();
foreach($old as $c => $d)
{
foreach($d as $e => $f)
$newest[$c][$e] = $new[$c][$e];
}
但是是不是有更好的办法有1个或2 PHP数组函数来做到这一点?我仍然还需要知道哪些值已经改变.... arggg
这就是我在做什么:$旧[$行[ '盖'] [$行[ '中'] = $ mposition; 将等于$ new [$ id] [$ idpos] = $ pos;但价值观将会不同。 如何正确使用array_diff_assoc()? – SoLoGHoST 2010-03-31 02:03:44
另外,有没有更快的方法来做到这一点: $ new = array(); \t \t \t \t的foreach($ currLayout为$ C => $ d) \t \t { \t \t \t的foreach($ d为$ E => $ F) \t \t \t \t $新[$ C] [ $ e] = $ newLayout [$ c] [$ e]; \t \t} 我认为这是我想要做的,因为我也想获得所有未改变的值,我想在数据库中更新会更容易。 – SoLoGHoST 2010-03-31 02:20:55
好的,我最后的回答很糟糕,所以我完全编辑并重写了它。我希望这个更有帮助 – 2010-03-31 17:59:56