Php在不同的数组键中搜索相同的值

Php在不同的数组键中搜索相同的值,php,arrays,multidimensional-array,foreach,Php,Arrays,Multidimensional Array,Foreach,这是我的小脚本,但目前没有得到正确的结果: <?php // Delimiters betweeb data "*" elements in each data delimiters "," $data_string="house1,403,phone1*house2,404,phone2*house3,403,phone3*house4,405,phone3"; // Explode $data_string for "~" delimiter $dat

这是我的小脚本,但目前没有得到正确的结果:

<?php

    // Delimiters betweeb data "*" elements in each data delimiters ","
    $data_string="house1,403,phone1*house2,404,phone2*house3,403,phone3*house4,405,phone3";
    // Explode $data_string for "~" delimiter
    $data_exp=explode("*",$data_string);
    //

    // Loop 1
    foreach($data_exp as $data_1)
    {
        $data_exp_compar=explode(",",$data_1);

        // We want see the elements with the same data in common in second position (403,404,etc)
        $data_common_1[]=$data_exp_compar[1];
        $data_common_2[]=$data_exp_compar[1];
    }

    $a=array_values(array_intersect_key($data_common_1,$data_common_2));
    $b=array_count_values(array_intersect_key($data_common_1,$data_common_2));

    foreach($a as $aa=>$values)
    {
        echo $aa;
        print "<br>";
    }

?>
正如您所看到的,唯一用于比较的元素是第二个位置和产品id

我尝试了很多事情,但我不能得到工作,也不能得到我想要的最终结果


谢谢大家,关于

我建议使用array\u map和array\u filter函数。如果你对此有任何疑问,请告诉我

<?php

// Prepare data and input
$id = 403;
$data = "house1,403,phone1*house2,404,phone2*house3,403,phone3*house4,405,phone3";

// Convert string data to array
$data = explode("*", $data);
$data = array_map(function ($row) {
    return explode(",", $row);
}, $data);

// Search the array
$response = array_filter($data, function ($row) use ($id) {
    return $row[1] == $id;
});

print_r($response);

您可以先将它们分组,然后再分组另一个foreach循环以打印结果

$data_string="house1,403,phone1*house2,404,phone2*house3,403,phone3*house4,405,phone3";
$data_exp = explode("*",$data_string);

$group = []; // Initialize group array
foreach($data_exp as $data_1)
{
    $data_exp_compar=explode(",",$data_1);
    $group[$data_exp_compar[1]][] = $data_exp_compar; // Group by the number key after exploding
}

// Loop to each group, then print desired format
foreach ($group as $key => $value) {
    echo 'Product ID: ' . $key . ' (' . count($value) . ' Actually)<br>';
    foreach ($value as $k => $v) {
        echo ++$k . ' - ' . implode(',', $v) . '<br>';
    }
    echo '<br>';
}
$data_string="house1,403,phone1*house2,404,phone2*house3,403,phone3*house4,405,phone3";
$data_exp = explode("*",$data_string);

$group = []; // Initialize group array
foreach($data_exp as $data_1)
{
    $data_exp_compar=explode(",",$data_1);
    $group[$data_exp_compar[1]][] = $data_exp_compar; // Group by the number key after exploding
}

// Loop to each group, then print desired format
foreach ($group as $key => $value) {
    echo 'Product ID: ' . $key . ' (' . count($value) . ' Actually)<br>';
    foreach ($value as $k => $v) {
        echo ++$k . ' - ' . implode(',', $v) . '<br>';
    }
    echo '<br>';
}