【问题标题】:PHP getting a specific key value at a specfic index in an arrayPHP在数组中的特定索引处获取特定的键值
【发布时间】:2018-12-27 01:44:07
【问题描述】:

我在这里看了很多,我似乎有一些类似的问题,但它们似乎都不适用于我的情况(或者至少我无法让它们起作用),所以希望这是不是完全重复。

我构建了一个如下所示的数组:

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();
}

谢谢!

【问题讨论】:

  • 试试echo $datas[$foundAtPos]['article_title'];

标签: php arrays loops


【解决方案1】:

您可以通过使用带有 null 作为 $column_key 参数的 array_column 来大大简化此操作。

这将使用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
    )
)

然后您可以在结果数组的$linkID 上使用isset。

示例: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];
    }
}

【讨论】:

  • 不错,我总是忘记array_column()的第三个参数
  • 哇,太棒了。虽然我还没有完全理解,但你的回答肯定会帮助我学习 php。非常感谢! :)
【解决方案2】:

如果您已经知道 ID,那么只需在该子数组上循环:

$foundAtPos = array_search($linkID, array_column($datas, 'article_id'));
foreach ($datas[$foundAtPos] as $key => $value) {
    echo $key . ': '. $value;
}

或者如果您想在某个索引处获取特定的键/值对,那么您可以使用方括号运算符:

$foundAtPos = array_search($linkID, array_column($datas, 'article_id'));
echo $datas[$foundAtPos]['article_title'];

【讨论】:

  • 好吧,我什至不确定循环是否完全必要,只是我还没有弄清楚如何在数组中的特定索引处获取特定的键/值。
  • 所以你的建议让我得到正确的行,并产生以下输出..article_id: 2article_title: Article 2article_content: 这是第 2 篇文章的内容(这是我期望得到的),但是我需要做的是将其分解并仅获取该行的 article_title 或 article_content,而我很难做到这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
相关资源
最近更新 更多