由于以下对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次搜索数组?我想是因为数组在内存中,这将是找到我需要的值的最快方法。
或者,有没有更好的方法从头开始查询数据库,以便我的结果集的格式更容易搜索?
答案 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;
}
}