簡體   English   中英

PHP:檢查多維數組是否包含值的一部分

[英]PHP: Check if multi dimensional array contains part of a value

考慮這樣的數組:

$my_array = array(    
    0 =>  array(  
        "Date"   => "20220901",  
        "Description"   => "My name is Jack"  
        
    ),  
    1   =>  array(  
        "Date"   => "20220901",  
        "Description"   => "I have a dog"
    ), 
    2   =>  array(  
        "Date" =>  "20220901",  
        "Description"   => "I have a house"
    )
);

如果我搜索值“Jack”,如何返回truefalse 換句話說,如何在數組中搜索單詞Jack並返回truefalse (如果存在)? 請記住,“Jack”只是值的一部分,而不是完整值,即“My name is Jack”。

這是我嘗試過的,但它返回 false,因為我沒有提供完整的值:

if (array_search("Jack", array_column($my_array, 'Description')) !== false) {
  echo 'True';
} else {
  echo 'False';
}

array_search 正在做嚴格的搜索,我想你可以使用 strpos() ,如下例所示。

function searchInArray($rawArray, $search, $column) {
    foreach ($rawArray as $value) {
        if (isset($value[$column]) && strpos($value[$column], $search) !== false) {
            return true;
        }
    }
    
    return false;    
}

echo searchInArray($my_array, "Jack", "Description");

這是一種使用 array_filter 查找所有匹配條目的方法。 要使其成為布爾值,您可以添加前綴!! .

你也可以使用

if ($matches) { doSomething(); } else { echo "Empty"; }

代替

if (!!$matches) { doSomething(); } else { echo "Empty"; }

這樣做的好處是,您還可以計算下面這個示例的結果。

echo count($matches);

例子

$needle = 'Jack';
$matches = array_filter($my_array, fn($item) => false !== strpos($item['Description'], $needle));
print_r($matches);

$hasNeedle = !!$matches;
var_dump($hasNeedle);

Output

Array
(
    [0] => Array
        (
            [Date] => 20220901
            [Description] => My name is Jack
        )

)


bool(true)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM