使用数组搜索,但在找到结果后继续搜索(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/>";
  }
}