我有这样的数组:
Array
(
Array
(
[0] => xx
[1] => 123
)
Array
(
[0] => xx
[1] => 523
)
Array
(
[0] => xx
[1] => 783
)
Array
(
[0] => yy
[1] => 858
)
Array
(
[0] => yy
[1] => 523
)
Array
(
[0] => xx
[1] => 235
)
)
字符串
我想做的是:
Array
(
Array
(
[0] => xx
[1] => 123
[2] => 523
[3] => 783
[4] => 235
)
Array
(
[0] => yy
[1] => 858
[2] => 523
)
)
型
因此,我只需要查找[0],找到相同的值,然后删除重复项并将其他值(未知数,尽管这里只有一个)合并到同一个[0]值下。如果我这样做:
$array = [array("xx","123"), array("xx","523"), array("xx","783"), array("yy","858"), array("yy","523"), array("xx","235")];
$new=array();
$col = array_column($array, 0);
foreach( $array as $key => $value ) {
if( ($find = array_search($value[0], $col)) !== false ) {
unset($value[0]);
$new[$find]= array_merge($array[$find], $value);
}
}
print_r($new);
型
我得到这个(没有所有值):
Array
(
[0] => Array
(
[0] => xx
[1] => 123
[2] => 235
)
[3] => Array
(
[0] => yy
[1] => 858
[2] => 523
)
)
型
3条答案
按热度按时间kx5bkwkv1#
当其他值的数量仅为1时:
字符串
对于任何数量的其他值的更通用的解决方案:
型
另外,在最后一种情况下,
array_merge()
可以被带有解包参数的array_push()
替换:型
mzillmmw2#
一个简单的循环,使用
0
索引作为新数组的键,并附加1
索引中的其他值:字符串
array_values()
将数组重新索引为数字索引。为了唯一性,只需在循环中执行
array_unique()
或在末尾Map它:型
klr1opcd3#
你可以使用
array_replace
函数。如果第一个数组中的键存在于第二个数组中,则其值将被第二个数组中的值替换。如果键存在于第二个数组中,而不是第一个数组中,则它将在第一个数组中创建。如果一个键只存在于第一个数组中,它将保持原样。如果传递了几个数组进行替换,它们将按顺序处理,后面的数组将覆盖前面的值。array_replace()不是递归的:它将用第二个数组中的任何类型替换第一个数组中的值。
@param array $array -替换元素的数组。
@param array ...$replacements
@return array -如果发生错误,则返回null。
@link https://php.net/manual/en/function.array-replace.php
将传递的数组中的元素替换到第一个数组中