如何在多维PHP数组中有效地定位键值对?

时间:2010-06-10 17:53:08

标签: php mysql wordpress multidimensional-array

由于以下对Wordpress数据库的查询,我在PHP中有一个数组:

SELECT * FROM wp_postmeta WHERE post_id = :id

我返回了一个多维数组,如下所示:

Array ( [0] => Array ( [meta_id] => 380 [post_id] => 72 [meta_key] => _edit_last       [meta_value] => 1 )

......等等。

在此阵列中查找特定键值对的最佳方法是什么?

例如,我如何找到[meta_key] = event_name所在的行,以便我可以将同一行的[meta_value]值提取到PHP变量中?

我意识到我可以把它变成许多单独的MySQL查询。有没有人对连续10次SQL查询的效率有所了解,而不是10次搜索数组?我想是因为数组在内存中,这将是找到我需要的值的最快方法。

或者,有没有更好的方法从头开始查询数据库,以便我的结果集的格式更容易搜索?

2 个答案:

答案 0 :(得分:1)

让我们假设您总是想要搜索“meta_key”列,创建可以执行以下操作的数组:

$arr = array();
while($row = $mysqli->fetch_assoc()){
    $arr[$row['meta_key']] = $row;
}

然后你将有一个关联数组,将“meta_key”的值作为主索引。但在这种情况下,“meta_key”必须是唯一的,否则你会覆盖这些值。

你的例子看起来不像这样:

Array ( [_edit_last] => Array ( [meta_id] => 380, [post_id] => 72, [meta_key] => _edit_last, [meta_value] => 1 )

您可以使用索引轻松获取“meta_value”:

$var = $arr['_edit_last']['meta_value'];

这是你想要的吗?

编辑:如果每个“meta_key”都有一个值,则还可以为每个键创建一个多维数组。只需在while循环中使用此行:

$arr[$row['meta_key']][] = $row;

每个“meta_value”的每行都有一个数组,所以你的数组可能如下所示:

Array ( [_edit_last] => Array ( [0] => Array( [meta_id] => 380, [post_id] => 72, [meta_key] => _edit_last, [meta_value] => 1 ) )

然后,您可以使用另一个循环从一组“meta_key”值中获取所有值。

答案 1 :(得分:0)

根据您提供的阵列,执行以下操作:

$multiArray = Array ( [0] => Array ( ['meta_id'] => 380, ['post_id'] => 72, ['meta_key'] => _edit_last, ['meta_value'] => 1 );
$needleKey = 'meta_key';
$needle = 'event_name';

foreach ($multiArray as $key => $data) {
    if ($data[$needleKey] == $needle) {
        echo $key;
        break;
    }
}