좋아, 어떻게해야할지 모르겠다. 내가 그렇게 같은 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);
등 등
좋아, 그래서 난이 뚜껑 중순 배열 키를 제공하는 것입니다에 대해 생각할 수있는 가장 좋은 방법 및 내가 이렇게하면, 나는 기반 구축해야 또 다른 배열이 배열의 키를 비교해야 ... 그렇게 같은 쿼리의 while 루프 내 배열에 mposition 동일 지금
$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;
}
좋아, 그래서 지금은 데이터베이스 (기존 $)에서 정보를 원하시면, 1의 2 개 배열을 가지고 있고, $ _POST 위치 (새 $)에서 다른, 나는 내가 올바른 배열 키를 얻었기를 바랍니다.
이제 어떤 것이 바뀌 었는지 파악해야합니다. 예전과 새로운 것을 비교해야합니다. 또한 새로운 lid = 이전 뚜껑이있는 새 위치와 각 배열의 새 mid = old mid가있는 모든 데이터베이스로 데이터베이스를 업데이트해야합니다. 어떻게 든 array_key 또는 array_key_intersect를 사용해야 할 것이라고 확신하지만 정확히 어떻게 ... ???
또한 UPDATE가 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
또한 더 빠른 방법이 있습니다 : $ new = array(); \t \t \t \t의 foreach ($ currLayout $ C => $ D 등) \t \t \t \t $ 신규의 [$ C] [ \t \t { \t \t \t의 foreach ($ E => $ F로서 $의 d) $ e] = $ newLayout [$ c] [$ e]; \t \t 나는 데이터베이스에서 업데이트하는 것이 더 쉬울 것이라고 생각합니다. 변경하지 않은 모든 값을 얻고 싶기 때문에이 작업을 수행하고 싶습니다. – SoLoGHoST
좋아, 내 마지막 답변 빨려서 완전히 편집하고 그것을 다시 썼습니다. 이게 더 도움이되기를 바랍니다. –