首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:如何将关联数组的每个键与其他键进行比较,跳过排列?

问PHP:如何将关联数组的每个键与其他键进行比较,跳过排列?
EN

Stack Overflow用户
提问于 2015-03-19 09:22:42
回答 3查看 211关注 0票数 0

我有以下(看似)简单的PHP问题:

我有一个关联数组(它反映DB表的结构,但这与此无关),如下所示:

代码语言:javascript
复制
----------------------------------
 id  | name            | phone
----------------------------------
   1 | alice           | 12345678
   3 | bob             | 56789012
   9 | zorro           | 90123456
 ... | ...             | ...
----------------------------------

我需要遍历数组来比较(例如,检查没有两个人有相同的电话号码)每个键与所有其他的键,避免重复检查,如check(1,3)和check(3,1)。(我想我可以用一个等价的数学概念来命名这些duplications )。

代码语言:javascript
复制
<?php
  $table = [
    [
      "id" => "1",
      "name" => "alice",
      "phone" => "12345678",
    ], [
    [
      "id" => "3",
      "name" => "bob",
      "phone" => "56789012",
    ], [
    [
      "id" => "9",
      "name" => "zorro",
      "phone" => "90123456",
    ],
  ];
?>

这就是我想要的:

代码语言:javascript
复制
<?php
  foreach ($table as $record1) {
    foreach ($table as $record2) {
      check($record1["phone"], $record2["phone"]);
    }
  }
?>

但这当然是复核..。

通常(例如,在C language中),我会依次迭代数组,从外部循环当前索引旁边的索引开始内循环.但是在PHP中,我被告知不能按顺序迭代一个关联数组.:-(

因此,问题是:如何迭代PHP关联数组以将函数应用于任意几个键,从而避免排列?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-19 09:42:15

您可以这样做,就像在C中那样:

代码语言:javascript
复制
$len = count($table);
for($i = 0; $i < $len - 1; $i++)
    for($j = $i + 1; $j < $len; $j++)
        compare table[$i] and table[$j]

如果您的键不是顺序的,则迭代键数组(这是顺序的),而不是实际的数组:

代码语言:javascript
复制
$keys = array_keys($table);
$len = count($keys);
for($i = 0; $i < $len - 1; $i++)
    for($j = $i + 1; $j < $len; $j++)
        compare table[keys[$i]] and table[keys[$j]]
票数 1
EN

Stack Overflow用户

发布于 2015-03-19 09:28:46

您可以为此使用in_array:

代码语言:javascript
复制
foreach ($table as $record1) {
   if(in_array($record1["phone"], $table){

   }
}

此检查当前值是否存在于数组中。在这里阅读更多信息:http://php.net/manual/en/function.in-array.php

票数 0
EN

Stack Overflow用户

发布于 2015-03-19 09:32:11

(试试看:)

代码语言:javascript
复制
<?php

$data = array(
    array('id'=>'1','name'=>'test1','phone'=>'1231231234'),
    array('id'=>'2','name'=>'test2','phone'=>'1231231235'),
    array('id'=>'3','name'=>'test2','phone'=>'1231231234')
);

// sort and find duplicate numbers
$ch = array();
$duplicate = array();
foreach($data as $k=>$d){
    if(in_array($d['phone'],$ch)){
        $duplicate[] = $k;
    }else{
        $ch[$k]=$d['phone'];
    }
}
// remove duplicated numbers from the initial table array
if($duplicate){
    foreach($duplicate as $r)
        unset($data[$r]);
}
// now we have only unique numbers
echo '<pre>';
print_r($data);
echo '</pre>';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29140824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档