2015-11-27 55 views
1

我有結果陣列,並且每個數組索引表示各種對象(結果是從教義查詢)的組合。
我想這些值組合以相同的索引一樣可以例如在看到=>數組[0]有2個對象值「0」和名字所以我要這些結果來新陣列中0的索引等結合。所以我可以對新結果進行進一步處理。變換對象到陣列鍵表示後未定義偏移

array (size=4) 
     0 => 
     object(stdClass)[568] 
      public '0' => 
      object(stdClass)[552] 
       public 'id' => int 16 
       public 'userId' => int 250 
       public 'content' => string '<script>alert('Alert');</script> 
    adad adad adad 
    ### Heading' (length=61) 
      public 'name' => string 'biling' (length=13) 
     1 => 
     object(stdClass)[556] 
      public '0' => 
      object(stdClass)[554] 
       public 'id' => int 15 
       public 'userId' => int 250 
       public 'content' => string '<script>alert('Alert');</script> 
    adad 
    ### Heading' (length=51) 
      public 'name' => string 'biling' (length=13) 

我嘗試了一些代碼,但真正的問題,我面對的是,它不刪除或取消-ING 0指數,顯示偏移「0」是未定義

代碼

$results = 'Object Result which i shown';   
    $data = array(); 
    foreach ($results as $key => $item) { 

     $resultsCopyArray = array_diff_key((array)$item, [0]); 
     //this function must escape 0 index from $item and just add name to $resultsCopyArray but it's now working like it should be 

     var_dump(array_keys($resultsCopyArray)); 
     // -> showing 0, name 

     // var_dump($resultsCopyArray[0]); -> showing error 

     // I also tried to unset this value but noting 

     $data[] = (array)$item->{'0'} + $resultsCopyArray; 
    } 
    var_dump($data); 

回答

1

這是這些「PHP陣列陷阱」之一。

array_diff_key使用上鍵嚴格比較($k1 === $k2)。直接構建(簡單地說)使用優化的PHP數組:數字字符串被轉換爲數字。所以嚴格的比較失敗:"0" !== 0

但比較弱也將失敗。你可以看到它here

<?php 

function key_compare_func($key1, $key2) 
{ 
    var_dump($key1, $key2, $key1 == $key2, $key1 > $key2); 
    if ($key1 == $key2) 
     return 0; 
    else if ($key1 > $key2) 
     return 1; 
    else 
     return -1; 
} 

$a=new stdClass; 
$a->{"0"}=1; 
$a->n=2; 
echo "key\n"; 
var_dump(array_diff_key((array)$a, [0])); 
echo "ukey\n"; 
var_dump(array_diff_ukey((array)$a, [0], 'key_compare_func')); 

輸出

key 
array(2) { 
    ["0"]=> 
    int(1) 
    ["n"]=> 
    int(2) 
} 
ukey 
string(1) "0" 
int(0) 
bool(true) 
bool(false) 
string(1) "n" 
int(0) 
bool(true) 
bool(false) 
array(0) { 
} 

如果你確信你只有字符串鍵,使用that kind of code

<?php 

function key_compare_func($key1, $key2) 
{ 
    if ((string)$key1 == (string)$key2) 
     return 0; 
    else if ((string)$key1 > (string)$key2) 
     return 1; 
    else 
     return -1; 
} 

$a=new stdClass; 
$a->{"0"}=1; 
$a->n=2; 
var_dump(array_diff_ukey((array)$a, [0], 'key_compare_func')); 

輸出

array(1) { 
    ["n"]=> 
    int(2) 
} 
+0

感謝澄清:)也因爲相同unset()的原因不起作用? –