PHP在数组的特定索引处获取特定的键值

时间:2018-12-27 01:44:08

标签: php arrays loops

我在这里看了很多,而且我似乎也遇到了类似类型的问题,但是这些问题似乎都不适合我的情况(或者至少我无法使它们起作用),所以希望这是并非完全重复。

我建立了一个如下数组:

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),而我想做的就是在特定索引处获得特定值。

例如,如果页面网址是

/article.php?id=1

我首先将ID分配给变量:

$linkID = $_GET['id'];

现在我要搜索数组以找到与($ LinkID变量)匹配的商品ID:

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

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以通过仅使用array_column(将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];
    }
}

答案 1 :(得分:0)

如果您已经知道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'];