2015-04-02 26 views
1

我试图更改数组的值,如果其中一个值为多次进入,并且由null更改,则重复值首先执行。PHP - 多位数组 - 如果数组中的值相同,则更改除第一个以外的所有值

我有这样的阵列: $阵列=

array (size=6) 
    0 => 
    array (size=3) 
     'id' => int 1 
     'data-time-start' => int 0 
     'data-time-end' => int 5 
    1 => 
    array (size=3) 
     'id' => int 2 
     'data-time-start' => int 6 
     'data-time-end' => int 10 
    2 => 
    array (size=3) 
     'id' => int 1 
     'data-time-start' => int 11 
     'data-time-end' => int 15 
    3 => 
    array (size=3) 
     'id' => int 3 
     'data-time-start' => int 16 
     'data-time-end' => int 20 
    4 => 
    array (size=3) 
     'id' => int 4 
     'data-time-start' => int 21 
     'data-time-end' => int 25 
    5 => 
    array (size=3) 
     'id' => int 3 
     'data-time-start' => int 30 
     'data-time-end' => int 35 
    6 => 
    array (size=3) 
     'id' => null 
     'data-time-start' => int 40 
     'data-time-end' => int 45 
    7 => 
    array (size=3) 
     'id' => int 3 
     'data-time-start' => int 45 
     'data-time-end' => int 60 

在这个例子中我有两个次'id' = int 1和三次'id' = int 3。我想这样做是为了保持第一ID,但设置其他重复的ID为NULL,并返回一个这样的数组:

array (size=6) 
    0 => 
    array (size=3) 
     'id' => int 1 
     'data-time-start' => int 0 
     'data-time-end' => int 5 
    1 => 
    array (size=3) 
     'id' => int 2 
     'data-time-start' => int 6 
     'data-time-end' => int 10 
    2 => 
    array (size=3) 
     'id' => null 
     'data-time-start' => int 11 
     'data-time-end' => int 15 
    3 => 
    array (size=3) 
     'id' => int 3 
     'data-time-start' => int 16 
     'data-time-end' => int 20 
    4 => 
    array (size=3) 
     'id' => int 4 
     'data-time-start' => int 21 
     'data-time-end' => int 25 
    5 => 
    array (size=3) 
     'id' => null 
     'data-time-start' => int 30 
     'data-time-end' => int 35 
    6 => 
    array (size=3) 
     'id' => null 
     'data-time-start' => int 40 
     'data-time-end' => int 45 
    7 => 
    array (size=3) 
     'id' => null 
     'data-time-start' => int 45 
     'data-time-end' => int 60 

试图用这一点,但什么都没有发生......

var_dump(setNulForDuplicatesInArray($array, 'id')) 

function setNulForDuplicatesInArray($arr, $keyToFind) 
    { 
     $newArr = array(); 
     for ($i = 0; $i < sizeof($arr); $i++) { 
      if (in_array($arr[$i], $newArr)) 
       $newArr[$i][$keyToFind] = null; 
      else 
       $newArr[] = $arr[$i]; 
     } 
     return $newArr; 
    } 

阵列()是一样的...

谢谢!

回答

1

一种方法是创建另一个容器,用于检查该特定ID是否已被使用。在每一次迭代中,你都必须检查它。如果它已经在容器中,则将该id设置为null。粗糙例如:

$temp = array(); // temporary container 
foreach($array as &$a) { 
    if(!isset($temp[$a['id']])) { // if this id isn't here yet 
     $temp[$a['id']] = $a; // push it inside 
    } else { 
     $a['id'] = null; // if its already taken, set it to null 
    } 
} 

Sample Output

+0

好了解释相关,但你的函数返回“空” – Zagloo 2015-04-02 14:52:00

+1

@Zagloo我不知道你是如何使用这一点,但它工作正常的http://codepad.viper- 7.com/nQxABn – Ghost 2015-04-02 14:56:37

+0

哦对不起...我把你的代码放在一个函数中,并返回$ temp而不是$ array ...谢谢所有:)! – Zagloo 2015-04-02 14:59:43

相关问题