2014-03-29 35 views
4

目前,我有話要的效果:是否有一個「mysqli_fetch_all」使用列(PK)作爲結果數組中的索引?

<?php 

    // ...More Code 

    $result = mysqli_query($mysqli, "SELECT * FROM stock_types"); 
    if(!$result || mysqli_num_rows($result) < 1) die('error'); 
    $stock_types = mysqli_fetch_all($result, MYSQLI_ASSOC); 
    mysqli_free_result($result); 
    die(print_r($stock_types,true)); 

    // More Code... 

?> 

將輸出的東西效果:

Array (
    [0] => Array (
    [type_id] => 1 
    [type_name] => In Stock 
    [type_visible] => 1 
    [type_locked] => 0 
) 
    [1] => Array (
    [type_id] => 2 
    [type_name] => Out of Stock 
    [type_visible] => 1 
    [type_locked] => 1 
) 
    [2] => Array (
    [type_id] => 3 
    [type_name] => Offline 
    [type_visible] => 0 
    [type_locked] => 1 
) 
    [3] => Array (
    [type_id] => 5 
    [type_name] => Hidden 
    [type_visible] => 0 
    [type_locked] => 0 
) 
) 

是否有mysqli的提取過濾器,將使用的主鍵從(正確的說法?)結果集,如果一個作爲數組索引值存在?如果我的問題不明確,將導致東西,而不是對他的影響:

Array (
    [1] => Array (
    [type_name] => In Stock 
    [type_visible] => 1 
    [type_locked] => 0 
) 
    [2] => Array (
    [type_name] => Out of Stock 
    [type_visible] => 1 
    [type_locked] => 1 
) 
    [3] => Array (
    [type_name] => Offline 
    [type_visible] => 0 
    [type_locked] => 1 
) 
    [5] => Array (
    [type_name] => Hidden 
    [type_visible] => 0 
    [type_locked] => 0 
) 
) 

這不是必不可少的要刪除的type_id值,但如果主鍵可用於索引這將是超級有用陣列。我可以用一個抓取循環來做到這一點,但我想知道是否有更簡單更優雅的處理方式。

回答

3

在ext/mysqli中沒有方便的函數。

這個例子假設主鍵是第一列:

$set = array(); 
while ($row = $result->fetch_assoc()) { 
    $set[array_shift($row)] = $row; 
} 

要,但你可以通過一個讀取行之一,並把它們放入正確的數組重點打造你想要的方式排列與fetch_all()做到​​這一點,你可以處理數據集中的同時獲取:

$set = array(); 
$data = $result->fetch_all(); 
while ($row = array_shift($data)) { 
    $set[array_shift($row)] = $row; 
} 
+0

猜猜我必須堅持循環。感謝指導Bill。 – RedYetiCo

0

這是你考慮的一些自動化好事。大多數PHP用戶從不費心去思考這些問題。讓我建議你my library,我專門寫了這個解決方案和許多其他mysqli的不便之處。當然,它具有用於此目的的現成功能。

請注意的代碼,你需要得到你的陣列量:其不超過一行

$stock_types = $db->getInd('type_id', "SELECT * FROM stock_types"); 
print_r($stock_types);die; 

量是相同的代碼,你將需要幾乎所有的其他數據庫交互。即使在某些變量需要添加到查詢中時,這將需要大量的原始mysqli 不斷重複代碼(您肯定使用mysqli參數,是不是?)。

例如,這裏是我的最愛之一:

$data = $db->getAll("SELECT * FROM ?n WHERE id IN (?a) LIMIT ?i",$table,$ids,$limit); 

它會帶你與生mysqli的代碼只是瘋狂的金額,如果適當和安全做。雖然有適當的書面抽象庫,它仍然不超過一行

+0

聽起來很整潔!雖然我試圖去圖書館的github鏈接,但它返回了500錯誤,所以不知道怎麼回事。我一定會繼續檢查回來的聲音,就像我可以把我的牙齒插入一定的東西! – RedYetiCo

+0

聽起來很奇怪。它現在適合我。請保持聯繫。我會給你一個壓縮版本,如果它保持500 –

2

這正是我也在尋找的,這裏是一個簡單的例子與標準的PHP函數。這隻適用於如果你的數組的長度爲2。array_column

Array 
(
    [1] => xxx 
    [2] => yyy 
) 

代碼示例:

$result_set = mysqli_fetch_all($restult_set , MYSQLI_ASSOC); 
//syntax: array_column(arg, column_key, index_key) 
$result_set = array_column($result_set, 'name' , 'id'); 

這個偉大的工程,如果你只有兩種長度的陣列,可以節省大量的

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => xxx 
     ) 

    [1] => Array 
     (
      [id] => 2 
      [name] => yyy 
     ) 
) 

您可以使用函數作出如下格式mysqli在while循環中調用它作爲mysqli_fetch。希望這可能是有用的。

+0

+1看到第二個參數是如何混合的,我相信它也可以用來保存一個數組。好的發現,我會玩弄這個,看看我能不能做到我想要的。 – RedYetiCo

+0

**爲了使這個工作不只有兩個值**,只需將第二個參數設置爲null,將第三個參數設置爲所需的數組索引值。 – duckboy81

相關問題