Tamam, bu nasıl gerçekten emin değil. Ben şöyle bir SQL sorgusu duyulur ediliyor değerlere sahiptir:
$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);
vs vs
Tamam, bunun için aklınıza gelebilecek en iyi şey kapağı ve orta dizi anahtarları vermek ve bunu gibi sorgu sırasında döngü içinde bir diziye kompozisyon, eşit var yani ...
$old[$row['lid']][$row['mid']] = $mposition;
Bunu Şimdi, eğer ben bir $ _POST dizi [] dayanarak inşa etmek gerekir başka bir dizi ile bu dizinin anahtarları karşılaştırmak gerekir.
$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;
}
Tamam, şimdi ben ($ eski) veritabanından bilgi, 1 2 diziler var, ve $ _POST pozisyonlara (yeni $) başka, ben dizi anahtarları doğru var umuyoruz.
Şimdi yeni, eski gelen karşılaştırarak, bir değişti anlamaya ihtiyacımız var. Ve aynı zamanda, yeni pozisyonların tüm veritabanını güncellemek için gereken yere yeni kapak = eski kapak, ve yeni orta = her diziden eski orta. Ben array_key kullanabilir ya da bir şekilde array_key_intersect gerekecek eminim, ama emin değilim tam olarak nasıl ...??
Ayrıca, ben bir UPDATE, bir foreach döngüsü içinde yararlı olacağını sanmıyorum, belki UPDATE sorgusu bir CASE deyimi yapmak için bir yolu var mı?
Ayrıca, bu konuda doğru bir yol gidiyor muyum? YA ben bunu yerine bu bir muli-boyutlu bir dizi kullanarak başka bir şekilde yapmak gerekir.
Temelde aynı tuşlar = içinde her dizi değeri değişti veritabanında güncelleştirmek gerekir ve bunu güncelleştirmek için gereken yere veritabanında orta = orta (ikinci anahtar değeri).
Ayrıca, ben bu tür böyle olacağını düşünüyorum:
$newest = array();
foreach($old as $c => $d)
{
foreach($d as $e => $f)
$newest[$c][$e] = $new[$c][$e];
}
Ancak 1 veya 2 php dizi fonksiyonları ile bunu yapmak için daha iyi bir yolu yok mu? Ve ben de hala arggg .... hangi değerlerin değiştiğini bilmek gerekir