2015-04-02 58 views
0

我試圖改變數組的值,如果一個af值是幾次進入並更改重複值首先豁免。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' => int 3 
     'data-time-start' => int 40 
     'data-time-end' => int 45 

在這個例子中我有兩個次'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 

我不是在PHP的專家...

編輯1:

試過是:

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; 
    } 

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

但沒有發生

感謝您的幫助!

+1

爲什麼不通過'的var_dump()'? – D4V1D 2015-04-02 07:42:59

+1

@anantkumarsingh非常不好的建議,如果使用'var_dump'而不是'print_r',你會驚訝地發現這裏有多少問題會很明顯。 – jeroen 2015-04-02 07:46:39

回答

1

這裏有一個小功能應該做的伎倆:

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

它遍歷數組和檢查同一條目是否已經存在於$newArr。如果是這樣,id設置爲null。如果不是,則將該條目推入$newArr

請注意在這個例子中null是一個字符串。我這樣做是因爲在你想要的結果中,null是一個字符串。如果不需要,只需刪除周圍的引號。

+0

工程很好!但如何,如果我的陣列具有其它索引等做:'陣列(大小= 6) 0 => 陣列(大小= 1) 'ID'=> INT 1 1 => 陣列(大小= 1) 'id'=> int 2 2 => array(size = 1) 'id'=> int 2 3 => array(size = 1) 'id'=> int 3'?我更新了我的帖子 – Zagloo 2015-04-02 08:36:47

+0

我更新了我的帖子,因爲數組更改了litlle ...他有一些索引更多 – Zagloo 2015-04-02 09:14:05

1
$arr=array(
    array("id"=>1), 
    array("id"=>2), 
    array("id"=>1), 
    array("id"=>3), 
    array("id"=>4), 
    array("id"=>3), 
    array("id"=>3) 
    ); 
var_dump($arr); 
$tmp=array(); 
foreach($arr as $k =>$v){ 
    if(!in_array($v['id'], $tmp)){ 
     $tmp[]=$v['id']; 
    }else{ 
     $arr[$k]['id']=null; 
    } 
} 
var_dump($arr); 
+0

工程不錯!但如何讓我的數組有其他索引?看到我的帖子,我更新了!謝謝:) – Zagloo 2015-04-02 09:13:16

+0

爲什麼你不使用print_r – qiandutianxia 2015-04-03 02:09:10

+0

不明白你的帖子。例如 – qiandutianxia 2015-04-03 02:11:37

2
function setNulForDuplicates($theArray) { 
    $myarray = array(); 
    for ($ind = 0; $ind < count($theArray); $ind++) { 
     if (in_array($theArray[$ind], $myarray)) { 
      $myarray[$ind]['id'] = 'null'; 
     } else { 
      $myarray[$ind] = $theArray[$ind]; 
     } 
    } 
    return $myarray; 
} 

var_dump(setNulForDuplicates($arr)); 
+0

工程很好!但如何讓我的數組有其他索引?看到我的帖子,我更新了!謝謝 :) – Zagloo 2015-04-02 09:04:44

相關問題