[英]How can I search for value to get key and use that key to get another key in a different array?
[英]Search array by value in key and get another key's value
这是我的数组:
[0] => Array
(
[messages] => Array
(
[0] => Array
(
[message] => This is for sandwich
)
[1] => Array
(
[message] => This message is for burger
)
)
[price] => Array
(
[amount] => 5
[currency] => USD
)
[1] => Array
(
[messages] => Array
(
[0] => Array
(
[message] => This is a message for a delicious hotdog
)
)
[price] => Array
(
[amount] => 3
[currency] => USD
)
)
我想搜索所有 arrays 并且我想搜索“汉堡”这个词。 我想得到“汉堡”的价格和数量,即 5。如果我搜索“热狗”这个词,它将返回价格数量 3。我该怎么做? 谢谢
如果$array
是您的数组。 我认为这可能有效。
<?php
$check = 'hotdog';
foreach($array as $products){
foreach($products['messages'] as $messages){
if (strpos($messages['message'], $check) !== false) {
echo $check.' Found. Price'. $products['price']['amount'] .'</br>' ;
}
}
}
?>
您可以使用foreach
循环,然后使用strpos
或stripos
。
foreach ($array as $row) {
foreach ($row['messages'] as $row2) {
if(strpos($row2['message'], 'burger') !== false) {
$stringFound = true;
} else {
$stringFound = false;
}
}
if($stringFound === true) {
$price = $row['price']['amount'];
} else {
$price = '0';
}
}
echo $price;
在这里,我们使用array_column
, implode
和preg_match
。
1.
array_column
用于检索数组的特定列2.
implode
用胶水将一个数组连接成字符串。3.
preg_match
在这里用于匹配给定字符串中的特定单词。
$toSearch="hotdog";
foreach($array as $key => $value)
{
if(preg_match("/\b$toSearch\b/",implode(",",array_column($value["messages"],"message"))))
{
echo $value["price"]["amount"];
}
}
因为您只搜索第一个合格价格,所以最佳做法是使用条件break
来短路循环。 如果您找到了符合条件的条目,则没有理由进行更多循环。
在循环之前用null
值实例化$amount
变量,以正确区分成功搜索和不成功搜索。
str_contain()
是现代 function 以区分大小写搜索 substring(PHP7.4 及更高版本)。 如果您需要不区分大小写,则需要使用stripos($message['message'], $needle) == false
。 如果您需要匹配整个单词,则需要调用preg_match("/\b$needle\b/i", $message['message'])
。 如果使用正则表达式并且$needle
来自用户输入,则需要预先使用$needle = preg_quote($needle, '/');
.
代码:(演示)
$needle = 'burger';
$amount = null;
foreach ($haystack as ['messages' => $messages, 'price' => $price]) {
foreach ($messages as $message) {
if (str_contains($message['message'], $needle)) {
$amount = $price['amount'];
break;
}
}
}
var_export($amount);
// 5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.