按索引而不是按值搜索来自php多维关联数组中特定索引的所有值,而不是按值

时间:2020-03-09 13:42:15

标签: php arrays search multidimensional-array associative-array

在这个论坛的帮助下,我找到了一种获取完全适合我任务的数组的方法。我遇到了后续问题:

我得到了以下示例数组

Array ( 
[A] => Array (
 [D] => Array (
  [A] => Array (
   [M] => Array (
    [result] => ADAM )
   [N] => Array (
    [result] => ADAN )
      )
    )
  )  
  [H] => Array (
   [E] => Array (
    [N] => Array (
     [R] => Array (
      [Y] => Array (
       [result] => HENRY )
       )
    [N] => Array (
     [E] => Array (
      [S] => Array (
       [result] => HENNES )
           )
         )
       )
     )
   )
 )

在字母是索引的地方,最后我得到每个名称的结果数组。 现在,我正在寻找一种使用特定搜索字符串搜索此数组的方法,并且应该可以从第三个字符开始。因此,如果我搜索“ ADA”,我想从以下所有结果数组中获取值,它们都是“ ADAM”和“ ADAN”,因为它们都跟在Array ['A'] ['D'] ['A']上

我从正确的索引开始搜索没有任何麻烦,但是我想不出一种方法来访问所有“结果”数组。仅找到了搜索最终值(ADAM,ADAN)的方法,但声明我正在从搜索点中寻找所有可能的最终值。

所以基本上我想从结果字符串中获取所有值,这些结果值来自我的搜索字符串中最后一个字符作为数组的索引。希望这种解释指出我正在寻找什么。

预先感谢!

简而言之:

//my Input
$searchstring = 'ADA';

//Output i want

"ADAM",  "ADAN";

//Input
$searchstring = 'ADAM';

//Output

"ADAM"

编辑:我已经用我的方法编辑了这个问题,直到有评论指出我应该这样做(谢谢!),所以我尝试这样做:

当我有了Example-Array时,我尝试仅选择结构的必要部分:

$searchquery = 'HEN';
//Searchquery as Array
$check = str_split($searchquery);
//second isntance of the original array which is named $result
$finalsearch = $result;
foreach($check as $key) {
    $finalsearch = $finalsearch[$key];
}
//check with output if i selected the right area
print_r($finalsearch);

我从中得到的输出: Array([R] => Array([Y] => Array([result] => HENRY)))[N] => Array([E] => Array([S] => Array([result] => HENNES)))) 所以我在结构的右边。

然后我试图找到搜索索引“结果”的所有实例的方法。

我发现了以下功能和方法,所有这些功能和方法都使我能够搜索特定的值,而不是索引。

$newArray = array_values($finalsearch);

array-search($searchquery, $finalsearch);

那是我开始转圈的地方

2 个答案:

答案 0 :(得分:1)

第一部分是找到列表的起点,这只是循环搜索字符串中的每个字符并移至数组中该值的情况。

一旦找到起点,就可以使用array_walk_recursive(),它将仅访问叶节点-因此,这仅是名称(在这种情况下),因此请创建所有这些节点的列表并返回他们...

function getEntry ( array $result, string $search )  {
    for($i = 0; isset($search[$i]); $i++){
        $result = $result[$search[$i]];
    }
    $output = [];
    array_walk_recursive($result, function ( $data ) use (&$output)   {
        $output[] = $data;
    });
    return $output;
}

$searchstring = 'ADA';
print_r(getEntry($result, $searchstring));

应该给...

Array
(
    [0] => ADAM
    [1] => ADAN
)

答案 1 :(得分:0)

此脚本首先循环访问包含$searchstring字符的键,如果找到它并且未引发任何错误,它将以递归的方式遍历数组以查找所有result键并将其添加到$result个数组。之后,它内爆$result数组并回显它。

$searchstring = 'HE';

for( $i = 0; $i < strlen( $searchstring ); $i++ )  {
  $sub = @( isset( $sub ) ? $sub[$searchstring[$i]] : $array[$searchstring[$i]] ) 
         or die( 'no results found' );
}

array_walk_recursive( $sub, function( $value ) use ( &$results )  {
  $results[] = $value;
});

echo implode( ', ', $results );