PHP получает определенное значение ключа по специальному индексу в массиве - PullRequest
0 голосов
/ 27 декабря 2018

Я просмотрел кучу вопросов здесь, и мне показалось, что у меня есть похожие вопросы, но ни один из них, похоже, не работал в моей ситуации (или, по крайней мере, я не мог заставить их работать), так что, надеюсь, это не такэто не точное повторение.

Я построил массив, который выглядит следующим образом:

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

Сначала я назначаю идентификатор переменной:

$linkID = $_GET['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();
}

спасибо!

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Вы можете значительно упростить это, просто используя array_column с нулем в качестве аргумента $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];
    }
}
0 голосов
/ 27 декабря 2018

Если вы уже знаете идентификатор, просто выполните цикл в этом подмассиве:

$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'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...