我在这里看了很多,而且我似乎也遇到了类似类型的问题,但是这些问题似乎都不适合我的情况(或者至少我无法使它们起作用),所以希望这是并非完全重复。
我建立了一个如下数组:
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();
}
谢谢!
答案 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
。
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
与键名一起使用
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'];