Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果数组有重复项,则键的值为空_Php_Arrays - Fatal编程技术网

Php 如果数组有重复项,则键的值为空

Php 如果数组有重复项,则键的值为空,php,arrays,Php,Arrays,我有这个数组 Array ( [0] => Array ( [user_id] => 78 [post_id] => 3 [post_user_added_id] => 2 ) [1] => Array ( [user_id] => 76 [post_id] =>

我有这个数组

    Array
(
    [0] => Array
        (
            [user_id] => 78
            [post_id] => 3
            [post_user_added_id] => 2
        )

    [1] => Array
        (
            [user_id] => 76
            [post_id] => 3
            [post_user_added_id] => 16
        )

    [2] => Array
        (
            [user_id] => 78
            [post_id] => 3
            [post_user_added_id] => 12
        )

    [3] => Array
        (
            [user_id] => 76
            [post_id] => 9
            [post_user_added_id] => 15
        )

     [4] => Array
         (
             [user_id] => 77
             [post_id] => 9
             [post_user_added_id] => 15
         )
我想做的是,如果关键post_id重复,我只想清空它并保留一个,这样我的最终数组就会像这样

 Array
(
    [0] => Array
        (
            [user_id] => 78
            [post_id] => 3
            [post_user_added_id] => 2
        )

    [1] => Array
        (
            [user_id] => 76
            [post_id] => 
            [post_user_added_id] => 16
        )

    [2] => Array
        (
            [user_id] => 78
            [post_id] => 
            [post_user_added_id] => 12
        )

    [3] => Array
        (
            [user_id] => 76
            [post_id] => 9
            [post_user_added_id] => 15
        )

     [4] => Array
         (
             [user_id] => 77
             [post_id] => 
             [post_user_added_id] => 15
         )
我已经尝试过这段代码,但它似乎不起作用,因为它删除了整个数组

                           foreach($arry as $k => $v)
                            {
                                foreach($arry as $key => $value)
                                {
                                    if($k != $key && $v['post_id'] == $value['post_id'])
                                    {
                                        unset($arry [$k]);
                                    }
                                }
                            }
                            print_r($arry);

也许你可以用一个堆栈来比较? 编辑:重写代码

$stack=[];
foreach ($array as $index => $subarray){
    if(in_array($subarray['post_id'], $stack)) {
        $array[$index]['post_id'] = null;

    }
    else $stack[]=$subarray['post_id'];
}
print_r($array);
例如: 希望这有帮助

试试这个

$tempArr = [];
$resArr = [];
foreach($orignalArr as $key=>$obj){
    if(in_array($obj['post_id'], $tempArr)){
        $obj['post_id'] = '';
        $resArr[] = $obj;
    }else{
        $tempArr[] = $obj['post_id'];
        $resArr[] = $obj;
    }
}

print_r($resArr);

在中使用数组值而不是$arr,并尝试按以下代码过滤数组:

 $arr = array(
        array(
            'user_id'=>15,
            'post_id'=>3,
            'post_user_added_id'=>2
            ),

            array(
            'user_id'=>16,
            'post_id'=>3,
            'post_user_added_id'=>2
            ),

         array(
            'user_id'=>18,
            'post_id'=>3,
            'post_user_added_id'=>2
            ),

             array(
            'user_id'=>18,
            'post_id'=>3,
            'post_user_added_id'=>2
            ),

             array(
            'user_id'=>16,
            'post_id'=>3,
            'post_user_added_id'=>2
            ),
    );

    $postids = array();
    foreach($arr as $key=>$val){

        if(in_array($val['post_id'], $postids)){ 
            $arr[$key]['post_id'] = '';
        }else{
            $postids[] = $val['post_id'];
        }
    }

    echo "<pre>";print_r($arr);exit;    
试试这个:

$last = null;//this will keep the previous post_id
foreach($arr as &$v){
 ($last && $last == $v['post_id']) ? ($v['post_id'] = '') : ($last = $v['post_id']);
}
print_r($arr);
您可以使用三元运算符执行foreach


工作示例:-

取消设置将完全删除条目及其键。您希望这个空白值到底是什么?无效的空字符串?空字符串或null any如果post_id与上一个不相同,但是另一个以前的条目,则会发生什么?@NigelRen这可能是一种情况,但正如OP中所述,它们是有序的。
// example code
$arrayResult = array();
$arry = [
    1 =>
        [
            'user_id' => 78,
            'post_id' => 3,
            'post_user_added_id' => 2
        ],

    2=>
        [
            'user_id' => 76,
            'post_id' => 3,
            'post_user_added_id' => 16
        ],
    3 =>
        [
            'user_id' => 78,
        'post_id' => 3,
            'post_user_added_id' => 12
        ],

    4 =>
        [
            'user_id' => 76,
            'post_id' => 9,
            'post_user_added_id' => 15
        ],

     5 =>
         [
            'user_id' => 77,
            'post_id' => 9,
            'post_user_added_id' => 15
         ]];

$final = array();
foreach($arry as $a)
{
    if (in_array($a['post_id'], $arrayResult)) {
        $a['post_id'] = 0;
    }else{
        $arrayResult[] = $a['post_id'];
    }
    $final[] = $a;
}

var_dump($final);
$last = null;//this will keep the previous post_id
foreach($arr as &$v){
 ($last && $last == $v['post_id']) ? ($v['post_id'] = '') : ($last = $v['post_id']);
}
print_r($arr);