Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.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_Multidimensional Array_Push - Fatal编程技术网

PHP将多个数组组合成多维数组

PHP将多个数组组合成多维数组,php,arrays,multidimensional-array,push,Php,Arrays,Multidimensional Array,Push,我正在用PHP编写代码来收集我在所有媒体帖子中使用的所有标签,看看有多少帖子我使用了标签,以及有多少人喜欢这个标签的帖子 我已经收集了数据库中的所有媒体帖子,现在可以导出这些信息。以下是正在输出的多维数组的示例: Array ( [0] => Array ( [id] => 1 [caption] => #londra #london #london_only #toplondonphoto #visitl

我正在用PHP编写代码来收集我在所有媒体帖子中使用的所有标签,看看有多少帖子我使用了标签,以及有多少人喜欢这个标签的帖子

我已经收集了数据库中的所有媒体帖子,现在可以导出这些信息。以下是正在输出的多维数组的示例:

Array
(
    [0] => Array
        (
            [id] => 1
            [caption] => #londra #london #london_only #toplondonphoto #visitlondon #timeoutlondon #londres #london4all #thisislondon #mysecretlondon #awesomepix #passionpassport #shootermag #discoverearth #moodygrams #agameoftones #neverstopexploring #beautifuldestinations #artofvisuals #roamtheplanet #jaw_dropping_shots #fantastic_earth #visualsoflife #bdteam #nakedplanet #ourplanetdaily #earthfocus #awesome_earthpix #exploretocreate #londoneye
            [likesCount] => 522
        )

    [1] => Array
        (
            [id] => 2
            [caption] => #londra #london #london_only #toplondonphoto #visitlondon #timeoutlondon #londres #london4all #thisislondon #mysecretlondon #awesomepix #passionpassport #shootermag #discoverearth #moodygrams #agameoftones #neverstopexploring #beautifuldestinations #artofvisuals #roamtheplanet #jaw_dropping_shots #fantastic_earth #visualsoflife #bdteam #nakedplanet #ourplanetdaily #earthfocus #awesome_earthpix #harrods #LDN4ALL_One4All
            [likesCount] => 1412
        )
)
我可以使用以下函数将这些hashtag分离出来:

function getHashtags($string) {  
    $hashtags= FALSE;  
    preg_match_all("/(#\w+)/u", $string, $matches);  
    if ($matches) {
        $hashtagsArray = array_count_values($matches[0]);
        $hashtags = array_keys($hashtagsArray);
    }
    return $hashtags;
}
现在我想为每个hashtag创建一个多维数组,如下所示:

Array
(
    [0] => Array
    (
        [hash] => #londra
        [times_used] => 2
        [total_likes] => 153
    )
    [1] => Array
    (
        [hash] => #london
        [times_used] => 12
        [total_likes] => 195
    )
)

我对这一点很陌生,不知道如何做到这一点。感谢您的帮助和建议

将hashtag用作数组中的键会更容易。你可以 如果需要,请稍后将其转换为最终格式。我们的想法是 遍历输入数组,并在每个元素中对给定的 hashtags字符串,递增计数器

如果你的hashtag总是在这样的字符串中,用 空白,您还可以使用
explode()
preg_split()
用于更精细的控制

$posts = # your input array
$tags = [];

foreach ($posts as $post) {
    $hashtags = explode(' ', $post['caption']);
    foreach ($hashtags as $tag) {
        if (!key_exists($tag, $tags)) {
            # first time seeing this one, initialize an entry
            $tags[$tag]['counter'] = 0;
            $tags[$tag]['likes'] = 0;
        }
        $tags[$tag]['counter']++;
        $tags[$tag]['likes'] += $post['likesCount'];
    }
}
转换为更接近原始请求的内容:

$result = array_map(function($hashtag, $data) {
    return [
        'hash' => $hashtag,
        'times_used' => $data['counter'],
        'total_likes' => $data['likes'],
        'average_likes' => $data['likes'] / $data['counter'],
    ];
}, array_keys($tags), $tags);

将hashtag用作数组中的键会更容易。你可以 如果需要,请稍后将其转换为最终格式。我们的想法是 遍历输入数组,并在每个元素中对给定的 hashtags字符串,递增计数器

如果你的hashtag总是在这样的字符串中,用 空白,您还可以使用
explode()
preg_split()
用于更精细的控制

$posts = # your input array
$tags = [];

foreach ($posts as $post) {
    $hashtags = explode(' ', $post['caption']);
    foreach ($hashtags as $tag) {
        if (!key_exists($tag, $tags)) {
            # first time seeing this one, initialize an entry
            $tags[$tag]['counter'] = 0;
            $tags[$tag]['likes'] = 0;
        }
        $tags[$tag]['counter']++;
        $tags[$tag]['likes'] += $post['likesCount'];
    }
}
转换为更接近原始请求的内容:

$result = array_map(function($hashtag, $data) {
    return [
        'hash' => $hashtag,
        'times_used' => $data['counter'],
        'total_likes' => $data['likes'],
        'average_likes' => $data['likes'] / $data['counter'],
    ];
}, array_keys($tags), $tags);

你如何计算每个标签的喜欢度?很难计算,但我会将has标签使用过的帖子中的喜欢度总和除以它使用过的帖子数量。你如何计算每个标签的喜欢度?很难计算,但是我会总结has标签在帖子中使用的总喜欢度,然后除以它在帖子中使用的数量。