Php 不区分大小写的唯一多维数组循环

Php 不区分大小写的唯一多维数组循环,php,arrays,multidimensional-array,unique,Php,Arrays,Multidimensional Array,Unique,我正在尝试通过多维数组循环并检索唯一值(不区分大小写),有人能帮我吗 $shop = array( array( 'Title' => "General enquiries", 'Phone' => 02085237289, ), array( 'Title' => "general enquiries",

我正在尝试通过多维数组循环并检索唯一值(不区分大小写),有人能帮我吗

$shop = array(
            array(
                'Title' => "General enquiries", 
                'Phone' => 02085237289,
            ),
            array(
                'Title' => "general enquiries", 
                'email' => 'something@gmail.com',
            ),
            array(
                'Title' => "not enquiries", 
                'Phone' => 02039303039,
            ),
            array(
                'Title' => "Not enquiries", 
                'email' => 'blah@gmail.com',
            )
        );
这就是我想要创造的:

General Enquiries 
02085237289
something@gmail.com

Not enquiries
blah@gmail.com
02039303039 
到目前为止,我所尝试的:

$res = array();
foreach ($shop as $each) {
    array_push($res,strtolower($each['Title']));
    array_push($res,$each['email']);
    array_push($res,$each['Phone']);
}

$test =  array_unique($res);

foreach($test as $t){
    //echo $t;
}

实现这一点的一种方法是使用两个数组,一个用于存储原始值,另一个用于存储小写比较:

# Create comparison array
$compare    =   array();
# Create a final store array
$store      =   array();
# Loop main rows
foreach($shop as $row) {
    # Loop rows (don't hardcode, it may change later)
    foreach($row as $key => $value) {
        # Since case is fine, you can turn all to lower for comparison
        $lcValue    =   strtolower($value);
        # Check if not in comparison array already
        if(!in_array($lcValue,$compare)) {
            # If not, add lowercase version to $compare and add original to $store
            $store[]    =   $value;
            $compare[]  =   $lcValue;
        }
    }
}

print_r($store);
给你:

Array
(
    [0] => General enquiries
    [1] => 02085237289
    [2] => something@gmail.com
    [3] => not enquiries
    [4] => 02039303039
    [5] => blah@gmail.com
)

需要注意的一点是,您将如何知道要存储的版本(按数组的顺序)将不会获得大写版本的
not INQUIRES
,因为小写版本在循环中首先运行。你的例子是大写的,但是你说它可以不区分大小写,所以我想这很好…

多亏了Rasclatt和Haotian Liu,我终于弄明白了。我想我应该把它挂起来,以防人们好奇。 谢谢大家

我对阵列做了一些更改,如下所示:

Array
(
    [0] => Array
        (
            [contact_description] => Employment support
            [contact_type] => Phone
            [contact] => 0300 456 8110
        )

    [1] => Array
        (
            [contact_description] => General enquiries
            [contact_type] => Phone
            [contact] => 0300 456 8052
        )

    [2] => Array
        (
            [contact_description] => employment support
            [contact_type] => Email
            [contact] => employmentservices.osc@remploy.co.u
        )

    [3] => Array
        (
            [contact_description] => general enquiries
            [contact_type] => Email
            [contact] => info@remploy.co.uk
        )

)

 $res = array();
 foreach ($shop as $each) {
      $lcValue = strtolower($each['Title']);
       if (isset($res[$lcValue]))
           array_push($res[$lcValue], $each['contact']);
       else
          $res[$lcValue] = array($each['contact']);
   }




foreach ($res as $name => $contact) {
                    echo '<h5 class="mb-0">' . ucwords($name) . '</h5>';
                    foreach ($contact as $contact) {
                        if (1 === preg_match('~[0-9]~', $contact)) {
                            // Phone Number
                            echo '<li class="work_number"><a href="tel:' . $contact . '">' . $contact . '</a></li>';
                        } elseif (strpos($contact, '@') !== false) {
                            //Email
                            echo '<li class="email"><a href="mailto:' . $contact . '" target="_blank">' . $contact . '</a></li>';
                        } else {
                            echo '<li><a>' . $contact . '</a></li>';
                        }
                    }

                }
数组
(
[0]=>阵列
(
[联系方式描述]=>就业支持
[联系人类型]=>电话
[联系方式]=>03004568110
)
[1] =>阵列
(
[联系方式描述]=>一般查询
[联系人类型]=>电话
[联系方式]=>03004568052
)
[2] =>阵列
(
[联系方式描述]=>就业支持
[联系人类型]=>电子邮件
[联系]=>就业服务。osc@remploy.co.u
)
[3] =>阵列
(
[联系方式描述]=>一般查询
[联系人类型]=>电子邮件
[联系方式]=>info@remploy.co.uk
)
)
$res=array();
foreach($shop作为$each){
$lcValue=strtolower($each['Title']);
如果(isset($res[$lcValue]))
数组推送($res[$lcValue],$each['contact']);
其他的
$res[$lcValue]=数组($each['contact']);
}
foreach($res as$name=>$contact){
回显“.ucwords($name)。”;
foreach($contact as$contact){
如果(1==预匹配(“~[0-9]~”,$contact)){
//电话号码
echo'
  • ; }elseif(strpos($contact,'@')!==false){ //电子邮件 回显“
  • ”; }否则{ 回显“
  • ”.$contact.“
  • ”; } } }
    一个问题是如何决定选择哪一个?对于
    一般查询
    您选择了前一种,而对于
    非查询
    您选择了后一种。选择哪种情况?我不介意,它可以是任何一个,它只需要是姓名和联系人。如果这是公认的答案,你也可以接受你的答案。那么这个问题就不会被指定为悬而未决。如果你觉得很慷慨,而且我的回答很有帮助,我将非常感谢你的支持,但这不是必须的……但我会接受你自己的回答。