首页 > 解决方案 > 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();
}

谢谢!

标签: phparraysloops

解决方案


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];
    }
}

推荐阅读