php - PHP在数组中的特定索引处获取特定键值
问题描述
我在这里看了很多,我似乎有一些类似的问题,但它们似乎都不适用于我的情况(或者至少我不能让它们工作),所以希望这不是一个精确重复。
我构建了一个如下所示的数组:
Array
(
[0] => Array
(
[article_id] => 1
[article_title] => Article 1
[article_content] => This is some dummy text for the first article.
)
[1] => Array
(
[article_id] => 2
[article_title] => Article 2
[article_content] => This is the content for article #2
)
)
所以该数组有 3 个键(article_id、article_title、article_content),而我要做的是在特定索引处获取特定值。
因此,例如,如果页面 url 是
/article.php?id=1
我首先将 id 分配给一个变量:
$linkID = $_GET['id'];
现在我想搜索数组以查找文章 id 匹配项(与 $LinkID 变量匹配):
$foundAtPos = array_search($linkID, array_column($datas, 'article_id'));
这很好用,并给了我一个匹配的“索引”位置,这是一个很好的开始,现在我想将其他两个键值分配给变量(或将它们回显到屏幕上,向我展示我已经检索到的东西正确的 id - article_title 值)。
这是我真正陷入困境的部分。我可以轻松地显示数组中的所有值,但我不想这样做。我只想获取与相应 article_id 匹配的特定值。
这是我尝试过的一些事情(不成功):
foreach ($datas as $keyName) {
echo $keyName['article_title'];
}
这给了我所有的文章标题,但这不是我的目标。
这一点是我从另一个堆栈溢出帖子中得到的,看起来很接近,但我无法正确调整它。
foreach($datas as $firstKey => $firstValue) {
echo array_keys($firstValue, $firstValue['article_title'])[0].': '.$firstValue['article_title'].'</br>';
}
同样的问题,给了我所有的数据,而不仅仅是我要检索的行。
因此,我已经转了几个小时,这似乎应该是一件常见的事情,但目前我还没有意识到,所以我很感激各位好人可能提出的任何建议。
这是我的全部功能,供参考。
if (isset($_GET['id'])) {
$linkID = $_GET['id'];
foreach ($datas as $keyName) {
//echo $keyName['article_title'];
}
//foreach($datas as $firstKey => $firstValue) {
//echo array_keys($firstValue, $firstValue['article_title'])[0].': '.$firstValue['article_title'].'</br>';
//}
//retrieve index of match in array
$foundAtPos = array_search($linkID, array_column($datas, 'article_id'));
print_r($datas[$foundAtPos]);
} else {
header('Location: index.php');
exit();
}
谢谢!
解决方案
array_column
您可以通过使用with null 作为$column_key
参数来简化这一点。
这将使用article_id
.
Array
(
[1] => Array
(
[article_id] => 1
[article_title] => Article 1
[article_content] => This is some dummy text for the first article.
)
[2] => Array
(
[article_id] => 2
[article_title] => Article 2
[article_content] => This is the content for article #2
)
)
然后你可以isset
在$linkID
结果数组上使用。
示例:https ://3v4l.org/Fmj9K
if (isset($_GET['id'])) {
$linkID = $_GET['id'];
$articles = array_column($datas, null, 'article_id');
if (isset($articles[$linkID])) {
$article = $articles[$linkID];
//optionally convert from an array values to variable values.
$article_title = $article['article_title'];
$article_content = $article['article_content'];
}
}
或者在 PHP 7.1+ 中,您可以使用list
键名
示例:https ://3v4l.org/C2c4K
if (isset($_GET['id'])) {
$linkID = $_GET['id'];
$articles = array_column($datas, null, 'article_id');
if (isset($articles[$linkID])) {
list('article_title' => $title, 'article_content' => $content) = $articles[$linkID];
}
}
推荐阅读
- github - GitHub 工作流程中的条件运行步骤
- node.js - package.json - 禁止在包源中使用某些文件名
- python - 将从 API 接收到的 png 格式文本转换为 png 文件 - python
- opencv - OpenCV:如何使灰色文本变暗?
- excel - 从工作簿导入数据并更改范围
- excel - 禁用在 Power Query 刷新时选择查询表
- .net - 是否可以在只有 4.6 .Net Framework 的系统上使用 .Net Framework 4.8 启动应用程序?
- sql - 列“l.Session_Device”必须出现在 GROUP BY 子句中或在聚合函数中使用
- python-3.x - 如何将空列添加到数据框中?- 跟进
- powershell - 激活虚拟环境在 powershell 中引发错误