繁体   English   中英

按键中的值搜索数组并获取另一个键的值

[英]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循环,然后使用strposstripos

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_columnimplodepreg_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"];
    }
}
  1. 因为您只搜索第一个合格价格,所以最佳做法是使用条件break来短路循环。 如果您找到了符合条件的条目,则没有理由进行更多循环。

  2. 在循环之前用null值实例化$amount变量,以正确区分成功搜索和不成功搜索。

  3. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM