2017-05-29 17 views
1

我有一個像下面如何搜索數組鍵中的子串?

$array =array(
"123,456,789"=> "1,1,1", 
"333"=>"1", 
"777"=>"1" 
) 

現在,一個數組,如果我在尋找456則需要回到我數組的鍵(123,456,789),並將其值(1,1,1)

我也試着像下面使它工作,但我沒有得到成功。我需要如果我正在搜索任何值的數組鍵(123或456或789),然後需要提供相同的結果。我知道我可以使用foreach循環來實現這一點,但我不想爲此創建foreach循環,所以建議我是否存在其他解決方案。

$matching_key = preg_grep("/\b456\b/", $array); 

對不起,但我在正則表達式中不太好。

想法?有什麼建議麼?

回答

0

這是一個嘗試

$array =array(
    "123,456,789"=> "1,1,1", 
    "333"=>"1", 
    "777"=>"1" 
); 

$search = '456'; 
$result = []; 

foreach($array as $key=>$value){ 

    if (strpos($key, $search) !== false) { 
    array_push($result, $value); 
    } 

} 

Print_r($result); 

$search是要尋找一個動態的變量,我用str_pos(),找到字符串是否有該密鑰。

+0

@Ankit Doshi嘗試上面的示例,如果適合您的場景,請使用array_walk()函數替換foreach –

+0

這也將匹配「12,3456,789」。任何不以逗號爆炸的非正則表達式解決方案將導致不正確的結果。 – mickmackusa

+1

@mickmackusa我明白。問題不在於此。他們甚至會搜索關鍵字中的'3,4'或'456,7',這就是我爲了'strpos'而不是'foreach'和正則表達式的原因,我不知道爲什麼他們下了我的答案,當有內建的方法,爲什麼要去'regex'或'foreach'。 –

2

preg_grep功能上排列的,不的作品,因爲它是你所需要的。

您可以將鑰匙放在第一位。

<?php 

$array =array(
    "123,456,789"=> "1,1,1", 
    "333"=>"1", 
    "777"=>"1" 
); 

$keys = array_keys($array); 
$matching_key = preg_grep("/\b456\b/", $keys); 

var_dump($matching_key); 
//returns "123,456,789" 

https://3v4l.org/SndkV

無論如何,我必須說,你應該改變你的數據結構。這看起來像一個糟糕的設計。

+0

Thanks for reply.It works,but now issue coming come like like it result like like array( [35] => 123,456,789 ); 但它不只給我123,456,789 –

+0

這是因爲可能有多個結果。如果您確定只會返回一個元素,您可以使用'current($ matching_key)'來獲取此元素的值。你也應該驗證一下是否有任何結果。 –

+0

謝謝,我已經得到了它。但是你能不能幫助更多,就像我想要的那樣,元素值需要像這樣改變.456匹配,第二個元素,我相信這個關鍵值1,1,1(第二個元素有值爲1),並且想將其更改爲0,然後像 array(123,456,789)=> 1,0,1 –