2014-03-30 54 views
-2

我有問題$ res數組....我不知道$ res [0]就像一個空變量(數組有很多日期,但我不知道爲什麼和哪裏錯了...我嘗試使用$ res ['ItemSlotX']和現在與$ res [0] ... 編輯:我已經改變了我的$ res [0]和1但是是相同的...PHP陣列在一段時間

謝謝大家幫忙

function smartsearch($whbin,$itemX,$itemY) { 
if (substr($whbin,0,2)=='0x') $whbin=substr($whbin,2); 
$items = str_repeat('0', 240); 
$itemsm = str_repeat('1', 240); 
$i = 0; 
while ($i<240) { 
    $_item = substr($whbin,(64*$i), 64); 
    $type = (hexdec(substr($_item,18,2))/16); 
    $dbgetvalutslots = new DB_MSSQL; 
    $dbgetvalutslots->Database='DTRMUWAP'; 
    $dbgetvalutslots->query("Select [ItemSlotX],[ItemSlotY] from ItemDetails where ItemIndex = '".hexdec(substr($_item,0,2))."' and ItemGroup = '".$type."'"); 
    $ijj=0; 
    $res=array(); 
    while ($dbgetvalutslots->next_record()) { 
    $temp = array(
    'ItemSlotX' => $dbgetvalutslots->f('ItemSlotX'), 
    'ItemSlotY' => $dbgetvalutslots->f('ItemSlotY')  
    ); 
    $res[$ijj]=$temp; 
    $ijj++;} 
    $y = 0; 
    while($y<$res[1]) { 
     $y++; 
     $x=0; 
     while($x<$res[0]) { 
      $items = substr_replace($items, '1', ($i+$x)+(($y-1)*8), 1); 
      $x++; 
     } 
    }  
    $i++; 
}$y = 0; 
while($y<$itemY) { 
    $y++;$x=0; 
    while($x<$itemX) { 
     $x++; 
     $spacerq[$x+(8*($y-1))] = true; 
    } 
} 
$walked = 0; 
$i = 0; 
while($i<120) { 
    if (isset($spacerq[$i])) { 
     $itemsm = substr_replace($itemsm, '0', $i-1, 1); 
     $last = $i; 
     $walked++; 
    } 
    if ($walked==count($spacerq)) $i=119; 
    $i++;}$useforlength = substr($itemsm,0,$last); 
$findslotlikethis='^'.str_replace('++','+',str_replace('1','+[0-1]+', $useforlength)); 
$i=0;$nx=0;$ny=0; 
while ($i<120) { 
    if ($nx==8) { $ny++; $nx=0; } 
    if ((eregi($findslotlikethis,substr($items, $i, strlen($useforlength)))) && ($itemX+$nx<9) && ($itemY+$ny<16)) 
     return $i; 
    $i++; 
    $nx++; 
} 
return 1337;} 
+0

這是不明確的問題,代碼是如此骯髒的瞭解...對不起:( – Anri

+0

'var_dump($ res)' - 它不包含你認爲它包含的內容。具體來說 - 你正在創建一個數組數組;而且它是包含'ItemSlotY'的子數組,所以你不能以你想要的方式迭代它們。 – andrewsi

+1

是的,請你幫個忙,重新格式化代碼。另一個建議:儘量避免(臨時)變量 - 例如你可以擺脫'$ ijj',但只需使用'$ res [] = ...'。 $ temp [] = array( 'ItemSlotX'=> $ dbgetvalutslots-> f('ItemSlotX'), 'ItemSlotY'=> $ dbgetvalutslots-> f('ItemSlotY') ) ;'。我認爲更多的意見是'$ x = 0; while($ x VolkerK

回答

0

似乎有成爲才能真正理解它的代碼缺乏上下文,但我已經可以看到這裏,應該是:

編輯:一些額外的代碼,以更明確

$y = 0; 
$numberOfRecords = count($res); 
while($recordN < $numberOfRecords) 
    while($y<$res[$recordN]["ItemSlotY"]) { 
     $y++; 
     $x=0; 
     while($x<$res[$recordN]["ItemSlotX"]) { 
      $items = substr_replace($items, '1', ($i+$x)+(($y-1)*8), 1); 
      $x++; 
     } 
    }  
    $i++; 
    $recordN++; 
} 

$temp是一個數組,然後你做$res[$ijj]=$temp;

+0

我不明白......我的頭會爆炸 – user3430798

+0

'$ res'的每個元素本身就是一個數組。沒有'$ res ['ItemSlotY'],但例如'$ RES [0] [ 'ItemSlotY']'。 – VolkerK

+0

是否這樣? \t \t $ res = array(); \t \t而($ dbgetvalutslots-> next_record()){ \t \t $溫度=陣列( \t \t 'ItemSlotX'=> $ dbgetvalutslots-> F( 'ItemSlotX'), \t \t 'ItemSlotY'=> $ dbgetvalutslots-> f('ItemSlotY')\t \t \t \t); \t \t $ res [] = $ temp; } \t \t $ y \t = 0; \t \t while($ y <$ res [1]){ \t \t \t $ y ++; \t \t \t $ x = 0; \t \t \t而($ X <$ RES [0]){ \t \t \t \t $項\t = substr_replace($項, '1',($ 1 + $ X)+(($ Y-1)* 8 ),1); \t \t \t \t $ x ++; \t \t \t \t} \t \t \t} \t \t $ \t我++; – user3430798