【问题标题】:PHP - Compare values in 2 Multidimensional Arrays then output all associated valuesPHP - 比较 2 个多维数组中的值,然后输出所有关联的值
【发布时间】:2018-01-26 17:30:24
【问题描述】:

试图在 PHP 中比较两个多维数组。不幸的是,我无法连接两个表,因为服务器是 MySQL 5.6,并且“fields”表字段值是 JSON 文档作为字符串。任何帮助将不胜感激。

   $fields = array(
        array(
            'id' => 1,
            'option' =>'Field Label 1',
        ),
        array(
            'id' => 2,
            'option' =>'Field Label 2',
        ),
        array(
            'id' => 3,
            'option' =>'Field Label 3',
        ),
);
    $leads = array(

        array(
            'field_num' => 1,
            'name'=>Eddie,
        ),
        array(
            'field_num' => 3,
            'name'=>Mike,
        ),
        array(
            'field_num' => 2,
            'name'=>Frank,
        ),
        array(
            'field_num' => 2,
            'name'=>Mark,
        ),
        array(
            'field_num' => 2,
            'name'=>Dan,
        ),
);

输出应如下所示:
埃迪 |字段标签 1
迈克 |字段标签 3
弗兰克 |字段标签 2
马克 |字段标签 2
丹 |字段标签 2

这是我尝试过的。不用说,它没有用。

      foreach( $fields as $key => $field ) {
    if ($fields[id] === $leads[$key]['field_num']); {
        $mergedFieldID = $fields[id] === $leads[$key]['field_num'];
         echo $leads[$key]['name'] . "|" . $field['option'] . '<br>';
    }
}

【问题讨论】:

  • "我无法连接两个表,因为服务器是 MySQL 5.6,而“fields”表字段值是 JSON 文档作为字符串。" ...就是这样丢人现眼。本来会更干净/更容易;)
  • 我添加了我在问题中尝试的内容。道歉。
  • 是的,那行不通。一个数组的索引,不一定与其他数组子“id”项的索引相同。

标签: php mysql arrays multidimensional-array


【解决方案1】:

这应该让你滚动:

$newarray = [];
foreach($leads as $lead) {
    $key = array_search($lead['field_num'], array_column($fields, 'id'));
    $newarray[] = array($lead['name'],$fields[$key]['option']);// put into new array
    echo $lead['name'] .'|'. $fields[$key]['option'] .'<br>';// or direct output
}
print_r($newarray);

输出:

Eddie | Field Label 1
Mike | Field Label 3
Frank | Field Label 2
Mark | Field Label 2
Dan | Field Label 2

Array (
    [0] => Array
        (
            [0] => Eddie
            [1] => Field Label 1
        )
    [1] => Array
        (
            [0] => Mike
            [1] => Field Label 3
        )
    [2] => Array
        (
            [0] => Frank
            [1] => Field Label 2
        )
    [3] => Array
        (
            [0] => Mark
            [1] => Field Label 2
        )
    [4] => Array
        (
            [0] => Dan
            [1] => Field Label 2
        )
    )

【讨论】:

    【解决方案2】:

    你可以这样使用:

    function combine_arrays_by_keys(
        array $array1, 
        string $id1, 
        string $use1, 
        array $array2, 
        string $id2, 
        string $use2
    ) : array
    {
        foreach ($array1 as $value) {
            $temp1[$value[$id1]] = $value[$use1];
        }
        foreach ($array2 as $value) {
            $temp2[$value[$id2]] = $value[$use2];
        }
        $result = [];
        foreach ($temp1 as $key => $value) {
            $result[] = [$temp1[$key], $temp2[$key]];
        }
        return $result;
    }
    

    演示:http://sandbox.onlinephpfunctions.com/code/74b94523078c7cc2e931e0892734b834f3dfa859

    【讨论】:

      【解决方案3】:

      如果您想尝试使用连接的正确 mysql 查询...查看您的数据样本,mysql db 的查询应该是

        select table2.name, table1.option
        from table1 
        inner join table2  on table1.id = table2.field_num
      

      这应该返回您发布的结果

      【讨论】:

      • 这可能是最高效的解决方案,但是他的数据是以 json 编码格式存储的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      相关资源
      最近更新 更多