使用数组搜索,但在找到结果后继续搜索(PHP)
我一直在玩数组搜索。我一直在尝试搜索数组并从中获取详细信息。问题是,一旦找到继续移动的结果,它就不会检查数组中是否存在重复项。我似乎无法理解我的循环逻辑,有什么建议吗使用数组搜索,但在找到结果后继续搜索(PHP),php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我一直在玩数组搜索。我一直在尝试搜索数组并从中获取详细信息。问题是,一旦找到继续移动的结果,它就不会检查数组中是否存在重复项。我似乎无法理解我的循环逻辑,有什么建议吗 $names数组 Array( [0] => Array ( [name] => Fred [age] => 20 ) [1] => Array ( [name] =>
$names
数组
Array(
[0] => Array
(
[name] => Fred
[age] => 20
)
[1] => Array
(
[name] => George
[age] => 17
)
[2] => Array
(
[name] => Sarah
[age] => 22
)
[3] => Array
(
[name] => Fred
[age] => 30
)
)
$name=" Fred";
//loop here
$array_position = array_search($name, array_column($names, 'name'));
$array_data = $names[$array_position];
echo $array_data['name'] . " is: " . $array_data['age'] . " years old.
//end loop
结果:
弗雷德今年20岁
预期结果:
弗雷德今年20岁
弗雷德30岁了
我试过array\u keys()
,但我对php.net不是很了解
我是否应该尝试将结果存储在单独的数组中,然后循环打印?似乎应该有一个更高效/优雅的解决方案。简单的foreach循环有什么问题
// Declare the array
$names = array(
array(
'name' => 'Fred',
'age' => 20
),
array(
'name' => 'George',
'age' => 17
),
array(
'name' => 'Sarah',
'age' => 22
),
array(
'name' => 'Fred',
'age' => 30
)
);
// Name to search
$name = 'Fred';
foreach($names as $index => $data){
if($data['name'] == $name)
echo $data['name'] . ' is ' . $data['age'] . ' years old.<br>';
}
使用数组过滤器查找所有
function search($array, $key)
{
return array_filter($array, function($v) use($key){return $v['name'] == $key;});
}
$result = search($array, $key);
foreach($result as $v)
{
echo $v['name'] . " is: " . $v['age'] . " years old.";
}
可以这样做:
<?php
$names = array(
array(
'name' => 'Fred',
'age' => 20
),
array(
'name' => 'George',
'age' => 17
),
array(
'name' => 'Sarah',
'age' => 22
),
array(
'name' => 'Fred',
'age' => 30
)
);
$matchKeys = array_keys( array_column($names, 'name'), 'Fred' );
array_map(function($arrKey) use ($names) {
echo $names[$arrKey]['name'] . " is: " . $names[$arrKey]['age'] . " years old.\n";
}, $matchKeys);
这有助于-
$check_name= 'Fred'; // set the name to check
$temp= array_filter($names, function($a) use($check_name) {
return $a['name'] === $check_name; // return if matches
});
// loop through the result
foreach($temp as $v) {
echo $v['name'] . ' is ' . $v['age'] . ' years old.<br>';
}
@Ben首先,array_search()返回true或false不是键,但对于所需的输出,您只需使用以下条件的foreach()或array_key进行尝试:
与foreach()一起
我不明白为什么在$name变量中给空格
$name=“Fred”
这是你的密码
$name=“Fred”;
函数数组\搜索\自定义($needle,$haystack){
$temp=[];
foreach($key=>$value的haystack){
if(修剪($针)==修剪($值)){
$temp[]=$key;
}
}
返回$temp;
}
$name=“Fred”;
$a_names=数组_列($names,'name');
$a_ages=数组_列($names,'age');
$array\u position=array\u search\u custom($name,$a\u name);
foreach($a_名称为$k=>$v){
if($array_position&&in_array($k,$array_position)){
echo$a_名称[$k]”是:“$a_年龄[$k]”岁。
”;
}
}
我修剪了你的名字,并根据你的要求编写了自定义数组搜索函数
试试看,它会起作用。在数组()中使用,而不是在数组搜索()中使用
Fred is: 20 years old.
Fred is: 30 years old.
Array(
[0] => Array
(
[name] => Fred,
[age] => 20
),
[1] => Array
(
[name] => George,
[age] => 17
),
[2] => Array
(
[name] => Sarah,
[age] => 22
),
[3] => Array
(
[name] => Fred,
[age] => 30
)
)
$name="Fred";
//loop here
for($i =0; i<count($names); $i++){
if($arr[$i] == $name)echo $name . ' is ' . $names[$i] ."years old.<br>";
}
//end loop
Fred is 20 years old
Fred is 30 years old
$check_name= 'Fred'; // set the name to check
$temp= array_filter($names, function($a) use($check_name) {
return $a['name'] === $check_name; // return if matches
});
// loop through the result
foreach($temp as $v) {
echo $v['name'] . ' is ' . $v['age'] . ' years old.<br>';
}
Fred is 20 years old.
Fred is 30 years old.
<?php
$names = array(0 =>
array(
"name" => "Fred",
"age" => 20
),
1 => array(
"name" => "George",
"age" => 17
),
2 => array(
"name" => "Sarah",
"age" => 22
),
3 => array(
"name" => "Fred",
"age" => 30
)
);
$name= "Fred";
echo "<pre>";
foreach($names as $val){
if($val["name"] == $name){
echo $name . " is: " . $val["age"] . " years old.\n";
}
}
<?php
$names = array(0 =>
array(
"name" => "Fred",
"age" => 20
),
1 => array(
"name" => "George",
"age" => 17
),
2 => array(
"name" => "Sarah",
"age" => 22
),
3 => array(
"name" => "Fred",
"age" => 30
)
);
$name=" Fred";
$array_position = array_keys(array_column($names, "name"), "Fred");
foreach($array_position as $key){
echo $names[$key]["name"] . " is: " . $names[$key]["age"] . " years old.\n";
}
$name=" Fred";
function array_search_custom($needle,$haystack) {
$temp = [];
foreach($haystack as $key=>$value) {
if(trim($needle)===trim($value)) {
$temp[] =$key;
}
}
return $temp;
}
$name=" Fred";
$a_names = array_column($names, 'name');
$a_ages = array_column($names, 'age');
$array_position = array_search_custom($name, $a_names);
foreach($a_names as $k => $v){
if($array_position && in_array($k, $array_position)){
echo $a_names[$k] . " is: " . $a_ages[$k] . " years old.<br/>";
}
}