【问题标题】:Complex & Confusing PHP Array Calculations复杂且令人困惑的 PHP 数组计算
【发布时间】:2011-03-02 11:04:10
【问题描述】:

我有一组需要帮助的数据。我需要通过几个多维数组进行困难的计算和数组排序,逻辑和语法让我很头疼。

基本上是我需要的:

  • 关键字数组
  • 我需要查询数据库并为每个关键字存储一些结果。 (关键字匹配的 ID 和计数)
  • 然后我需要翻转数组,所以它的 ID 不是作为父元素,而是每个关键字的匹配计数
  • 我需要执行计算以从这些匹配数中获取单个数字
  • 我需要对数组进行排序,以便查看哪个 ID 在数据库中产生了最高匹配值,以便查询和输出相关数据。

我现在知道我将如何计算相关性,只是我只是简单地使用了一维数组,我不知道如何用这个例子在语法上表示我需要的东西。谁能帮帮我?

这是我想要的示例 - 不确定这在语法上是否是向您展示的最佳方式,但希望您能明白:

Array
    (
        [Keywords] => Array
        (
            ["wax"] => Array
            (
                [ID] => 1
                [Match] => 8

                [ID] => 2
                [Match] => 10
            )
            ["hard"] => Array
            (
                [ID] => 1
                [Match] => 2

                [ID] => 2
                [Match] => 37
            )
        )

那么这个数组需要翻译成:

Array
    (
        [ID] => Array
        (
            ["1"] => Array
            (
                [Keyword] => "wax"
                [Match] => 8

                [Keyword] => "hard"
                [Match] => 10
            )
            ["2"] => Array
            (
                [Keyword] => "wax"
                [Match] => 2

                [Keyword] => "hard"
                [Match] => 37
            )
        )    

【问题讨论】:

  • 这个多维数组的样本?
  • 尝试更改 MySQL 查询以使数组更接近您的预期。这是我在深入 php 解决复杂数组操作之前要做的第一件事。

标签: php mysql arrays multidimensional-array


【解决方案1】:

这段代码:

$arr =  array
        (
            "wax" => array
            (
                array(
                    'ID' => 11,
                    'Match' => 8
                ),
                array(
                    'ID' => 21,
                    'Match' => 10
                )
            ),
            "hard" => array
            (
                array(
                    'ID' => 11,
                    'Match' => 2
                ),
                array(
                    'ID' => 21,
                    'Match' => 37
                )
            )
        );

$byid = array();
foreach($arr as $kw => $res) {
    foreach($res as $r) {
        $byid[$r['ID']][] = array('Keyword' => $kw, 'Match' => $r['Match']);
    }
}

var_export($byid);

给予:

array (
    11 => 
        array (
            0 => 
                array (
                    'Keyword' => 'wax',
                    'Match' => 8,
                ),
            1 => 
                array (
                    'Keyword' => 'hard',
                    'Match' => 2,
                ),
        ),
    21 => 
        array (
            0 => 
                array (
                    'Keyword' => 'wax',
                    'Match' => 10,
                ),
            1 => 
                array (
                    'Keyword' => 'hard',
                    'Match' => 37,
                ),
        ),
)

希望对你有帮助。

【讨论】:

    【解决方案2】:

    您可以通过以下方式查询数据库并创建两个数组,

    $query = "select id, keyword, count(*) as keyword_count from [your table] group by keyword";
    $result = mysql_query($query);
    while($row = mysql_fetch_array($result)){
      $keyword = $row['keyword'];
      $id = $row['id'];
      $count = $row['keyword_count'];
      $first_array["keywords"]["$keyword"] = array('id' => $id, 'match' => $count);
      $second_array["id"]["$id"] = array('keyword' => $keyword, 'match' => $count);
    }
    print_r($first_array);
    print_r($second_array);
    

    【讨论】:

    • 关键字由用户通过 HTML 表单输入,然后这些关键字由空格分隔符分隔,查询查看数据库中的字段标题和内容以查找与关键字匹配的字段。我如何修改 mysql 查询以反映这一点,我不擅长 mySQL 中的简单 SELECT、INSERT 和 UPDATES,所以任何帮助将不胜感激
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多