Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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,如何按值筛选多维数组?我想在此处删除带有重复符号的硬币: $input = [ ["name" => "Bitcoin", "symbol"=> "BTC"], ["name" => "Ethereum", "symbol"=> "ETH"], ["name" => "Bitcoin Cash", "symbol"=> "BCH"], ["name" => "Basic Attention Token", "symbol

如何按值筛选多维数组?我想在此处删除带有重复符号的硬币:

$input =  [
    ["name" => "Bitcoin", "symbol"=> "BTC"],
    ["name" => "Ethereum", "symbol"=> "ETH"],
    ["name" => "Bitcoin Cash", "symbol"=> "BCH"],
    ["name" => "Basic Attention Token", "symbol"=> "BAT"],
    ["name" => "BatCoin", "symbol"=> "BAT"]
]
输出将是一个数组,其中包含像这样的唯一硬币符号

$output = [
    ["name" => "Bitcoin", "symbol"=> "BTC"],
    ["name" => "Ethereum", "symbol"=> "ETH"],
    ["name" => "Bitcoin Cash", "symbol"=> "BCH"],
    ["name" => "Basic Attention Token", "symbol"=> "BAT"]
]
我试过了

$symbols = array_map(function($coin){
    return $coin['symbol'];
}, $input);


$output = array_filter($input, function($coin) use ($symbols) {
    return in_array($coin['symbol'], $symbols);
});
return $output;
但我仍然列出了5枚硬币。

算出了

    $unique_dict = [];
    foreach($input as $obj) {
        $symbol = $obj['symbol'];
        $unique_dict[$symbol] = $obj;
    }
    $unique_array = array_values($unique_dict);

您可以获得如下所示的独特对象

// make it json string first
$jsondata = '[{"name": "Bitcoin","symbol": "BTC"},{"name": "Ethereum","symbol": "ETH"},{"name": "Bitcoin Cash","symbol": "BCH"},{"name": "Basic Attention Token","symbol": "BAT"},{"name": "BatCoin","symbol": "BAT"}]';
// decode string to json objects which will generate like yours
$objects = json_decode($jsondata);
echo'<pre>';
// print first objects
print_r($objects);
$symbolHolder=[];
foreach ($objects as $key => $object) {
    // eliminate object from array which is identical symbol to others
    if(in_array($object->symbol, $symbolHolder))
    {
        array_splice($objects, $key,1);
    }
    array_push($symbolHolder, $object->symbol);

}
// now printing unique array of object
print_r($objects);
//首先将其设置为json字符串
$jsondata='[{“名称”:“比特币”,“符号”:“BTC”},{“名称”:“以太坊”,“符号”:“ETH”},{“名称”:“比特币现金”,“符号”:“BCH”},{“名称”:“基本注意标记”,“符号”:“BAT”},{“名称”:“BatCoin”,“符号”:“BAT”}];
//将字符串解码为json对象,该对象将生成与您类似的
$objects=json_decode($jsondata);
回声';
//打印第一个对象
打印(对象);
$symbolHolder=[];
foreach($key=>$object形式的对象){
//从与其他符号相同的数组中删除对象
if(在数组中($object->symbol,$symbolHolder))
{
阵列拼接($objects,$key,1);
}
数组推送($symbolHolder,$object->symbol);
}
//现在打印对象的唯一数组
打印(对象);

您可以使用数组函数执行此任务

-返回由列键标识的数组中单个列的值

-获取一个输入数组并返回一个没有重复值的新数组

-返回一个数组,该数组包含array1的所有条目,这些条目的键存在于所有参数中

例如:


添加您尝试过的内容,以便我们可以帮助您!伙计。。。整个上午,我一直在尝试数组过滤器、数组映射、数组差异、数组唯一等的所有组合,但我似乎仍然没有完全正确。我认为没有如中所述的多维数组。这只是一个对象数组…谢谢,更新了问题没有快速的方法来解决你的问题你需要通过循环…请检查这可能对你有用。。。。让我知道它是否适合你。。。我得到了完美的结果如果您想用迭代时遇到的每个重复项覆盖前面的元素,那么使用临时键是可以的——但这不是您在问题中要求的预期结果。
<?php
$json = '[
    {"name": "Bitcoin", "symbol": "BTC"},
    {"name": "Ethereum", "symbol": "ETH"},
    {"name": "Bitcoin Cash", "symbol": "BCH"},
    {"name": "Basic Attention Token", "symbol": "BAT"},
    {"name": "BatCoin", "symbol": "BAT"}
]';

$array = json_decode($json, true);
echo json_encode(
    array_intersect_key(
        $array,
        array_unique(array_column($array, 'symbol'))
    )
);