2014-03-29 36 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

相关问题