在这个论坛的帮助下,我找到了一种获取完全适合我任务的数组的方法。我遇到了后续问题:
我得到了以下示例数组
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);
那是我开始转圈的地方
答案 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 );