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

Searching all values from a specific Index in multidimensional, associative Array in php by Index, not by value

在这个论坛的帮助下,我找到了一种方法来获得一个完全适合我的任务的数组。我 运行 进入后续问题 tho:

我得到了以下示例数组

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 )
           )
         )
       )
     )
   )
 )

其中字母是索引,我最终得到每个名称的结果数组。 现在我正在寻找一种使用特定搜索字符串搜索此数组的方法,它应该可以从第 3 个字符开始。因此,如果我搜索 'ADA',我想从所有以下结果数组中获取值,这些结果数组将是 "ADAM" 和 "ADAN",因为它们都遵循 Array['A']['D']['A'].

我在开始搜索正确的索引时没有遇到任何问题,但我想不出一种访问所有 'result' 数组的方法。只找到了搜索最终值(ADAM、ADAN)的方法,但作为声明,我正在从我的搜索点寻找所有可能的最终值。

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

提前致谢!

简而言之:

//my Input
$searchstring = 'ADA';

//Output i want

"ADAM",  "ADAN";

//Input
$searchstring = 'ADAM';

//Output

"ADAM"

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

当我有我的示例数组时,我试图只 select 结构的必要部分:

$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);

我从中得到的输出: 数组([R] => 数组([Y] => 数组([结果] => 亨利))[N] => 数组([E] => 数组([S] => 数组([结果] =>汉尼斯 ) ) ) ) 所以我在结构的右边。

然后我试图找到搜索索引 'result' 的所有实例的方法。

我发现以下函数和方法都使我能够搜索特定值而不是索引。

$newArray = array_values($finalsearch);

array-search($searchquery, $finalsearch);

那是我开始兜圈子的地方

第一部分是找到列表的起点,这只是遍历搜索字符串中的每个字符并移动到数组中的那个值的情况。

找到起点后,您可以使用 array_walk_recursive(),它只会访问叶节点 - 所以这只会是名称(在本例中),因此创建所有这些节点的列表和 return 他们...

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
)

此脚本首先遍历包含 $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 );