php二维数组,key的值都一样,value的不一样,怎么合并。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php二维数组,key的值都一样,value的不一样,怎么合并。相关的知识,希望对你有一定的参考价值。

array(3)
[0] => array(2)
["pid"] => string(1) "6"
["title"] => string(24) "/thumb_525d615760eb0.jpg"

[1] => array(2)
["pid"] => string(1) "6"
["title"] => string(24) "/thumb_525d615708f2d.jpg"

[2] => array(2)
["pid"] => string(1) "6"
["title"] => string(24) "/thumb_525d615699a77.jpg"



想搞成的样子是
pid=6
title=/thumb_525d615760eb0.jpg,/thumb_525d615708f2d.jpg,/thumb_525d615699a77.jpg,.......

参考技术A /**
我的想法是这样的,将原数组遍历合并,将相同pid的项形成一个数组,然后就是将同一pid数组对应的子数组通过字符串函数join进行分隔
*/
$arr = array(array('pid'=>6, 'title'=>'/thumb_525d615760eb0.jpg'), 
  array('pid'=>6, 'title'=>'/thumb_525d615708f2d.jpg'),
      array('pid'=>6, 'title'=>'/thumb_525d615699a77.jpg'),
);
$newarr = $returnarr = array();
foreach($arr as $val)

$newarr[$val['pid']][] = $val['title'];

//输出:$newarr
array (size=1)
  6 => 
    array (size=3)
      0 => string '/thumb_525d615760eb0.jpg' (length=24)
      1 => string '/thumb_525d615708f2d.jpg' (length=24)
      2 => string '/thumb_525d615699a77.jpg' (length=24)

foreach($newarr as $k=>$v)

$title = join(',', $v);
$returnarr[] = array('pid'=>$k, 'title'=>$title); //如果需要返回一维数组:直                                                      接将$returnarr[]改成$returnarr

var_dump($returnarr);
//输出:
array (size=1)
  0 => 
    array (size=2)
      'pid' => int 6
      'title' => string '/thumb_525d615760eb0.jpg,/thumb_525d615708f2d.jpg,/thumb_525d615699a77.jpg' (length=74)

参考技术B

你是想把它合并成一维数组,全部叠加在一起?

就像这个样子:

array(
['pid']    => 6,
['title']=> '/thumb_525d615760eb0.jpg,/thumb_525d615708f2d.jpg,/thumb_525d615699a77.jpg'
)

你的第一个值一直是6吗?还是都叠加在一起,变成666?

如果是就一个6的话,可以这样:

<?php
$arr = array(3) 
  [0] => array(2) 
    ["pid"] => string(1) "6"
    ["title"] => string(24) "/thumb_525d615760eb0.jpg"
  
  [1] => array(2) 
    ["pid"] => string(1) "6"
    ["title"] => string(24) "/thumb_525d615708f2d.jpg"
  
  [2] => array(2) 
    ["pid"] => string(1) "6"
    ["title"] => string(24) "/thumb_525d615699a77.jpg"
  



//以上是你自己的,
//加上我的::

$new_arr = array();
foreach($arr as $key=>$value)
    for($i = 0;$i <= count_array($value);$i++)
        $new_arr[$i] = .$value[$i];
        





这个$new_arr数组里面就把数据整合好了



?>

本回答被提问者采纳
参考技术C $arr = array(array('pid'=>6,'title'=>'/thumb_...', ...));
$tmp = array();
foreach($arr as $val)
    array_push($tmp,$val['title']);

$res = join(',',$tmp);
print_r($res);

参考技术D 遍历2维数组,按照pid=>title生成一个新的1维数组追问

怎么生成

追答

...你这完全不懂啊..遍历数组的时候将没个数组的pid提取出来写入一个新数组.$newarray[$pid].=$title;
遍历完你就得到一个新的数组了

追问

我不是单单的要新数组吧?你先看明白我说的,然后按照你说的那么做,你看看差几百万公里,说话还那么牛B烘烘,真是的。

追答

..你这样生成的新数组包含的就是你要的数据,each输出一下就是
key = 6
value = /thumb_525d615760eb0.jpg,/thumb_525d615708f2d.jpg,/thumb_525d615699a77.jpg

PHP获取二维数组中指定Key的重复Value

<?php

/**
 * 判断二维数组中指定Key是否存在重复Value
 * @param array $arrInput 二维数组
 * @param string $strKey 键名
 * @return bool
 */
function hasRepeatedValues($arrInput, $strKey)

    //参数校验
    if (!is_array($arrInput) || empty($arrInput) || empty($strKey)) 
        return false;
    

    //获取数组中所有指定Key的值,如果为空则表示键不存在
    $arrValues = array_column($arrInput, $strKey);
    if (empty($arrValues)) 
        return false;
    

    if (count($arrValues) != count(array_unique($arrValues))) 
        return true;
    

    return false;


/**
 * 获取二维数组中指定Key的重复Value
 * @param array $arrInput 二维数组
 * @param string $strKey 键名
 * @return bool|string 重复的键值(以逗号分隔)
 */
function getRepeatedValues($arrInput, $strKey)

    //参数校验
    if (!is_array($arrInput) || empty($arrInput) || empty($strKey)) 
        return false;
    

    //获取数组中所有指定Key的值,如果为空则表示键不存在
    $arrValues = array_column($arrInput, $strKey);
    if (empty($arrValues)) 
        return false;
    

    $arrUniqueValues = array_unique($arrValues);
    $arrRepeatedValues = array_unique(array_diff_assoc($arrValues, $arrUniqueValues));
    return implode($arrRepeatedValues, ',');



//test
$arrTest = [
    [
        'id'    => 1,
        'name'  => 'test1',
    ],
    [
        'id'    => 1,
        'name'  => 'test2',
    ],
    [
        'id'    => 1,
        'name'  => 'test3',
    ],
    [
        'id'    => 2,
        'name'  => 'test4',
    ],
    [
        'id'    => 2,
        'name'  => 'test5',
    ],
    [
        'id'    => 3,
        'name'  => 'test6',
    ]
];
echo hasRepeatedValues($arrTest, 'id') . "\\n";
echo getRepeatedValues($arrTest, 'id') . "\\n";

感谢@qiaoweizhen提出了另一种更简洁地实现方式~

function test($arr, $key)

    $arr = array_count_values(array_column($arr, $key));
    return array_filter($arr, function ($value) 
        if ($value > 1) 
            return $value;
        
    );

以上是关于php二维数组,key的值都一样,value的不一样,怎么合并。的主要内容,如果未能解决你的问题,请参考以下文章

PHP二维数组转一维数组

PHP将二维数组中某个值都取出来组成一个新的数组

PHP获取二维数组中指定Key的重复Value

PHP获取二维数组中指定Key的重复Value

PHP二维数组根据某个元素(key)去重

php二维数组,按照指定的key,去排序value值