Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Loops_Operators - Fatal编程技术网

Php 以不同的编码样式构建数组时出现问题

Php 以不同的编码样式构建数组时出现问题,php,arrays,loops,operators,Php,Arrays,Loops,Operators,我在构建阵列时遇到了一个奇怪的问题。我从一个如下所示的数组开始: Array ( [0] => Array ( [tag_id] => 19 [tag_translation_id] => 12 [fk_language_id] => 1 [fk_tag_id] => 19

我在构建阵列时遇到了一个奇怪的问题。我从一个如下所示的数组开始:

Array (
       [0] => Array (
                      [tag_id] => 19
                      [tag_translation_id] => 12
                      [fk_language_id] => 1
                      [fk_tag_id] => 19
                      [tag_name] => test
                    )
       [1] => Array (
                      [tag_id] => 20
                      [tag_translation_id] => 14
                      [fk_language_id] => 1
                      [fk_tag_id] => 20
                      [tag_name] => testa
                    )
       [2] => Array (
                      [tag_id] => 20
                      [tag_translation_id] => 15
                      [fk_language_id] => 3
                      [fk_tag_id] => 20
                      [tag_name] => fdfda
                    )
       )
$tags = array();
foreach ($results as $result)
    $tags[$result['tag_id']][] = array($result['fk_language_id'], $result['tag_name']);
我要做的是将具有相同标记id的每个结果合并到单个数组中。这项工作:

    $tags = array();
    foreach($results->as_array() as $key=>$result)
    {
        if(!in_array($result['tag_id'], $tags))
        {
            $tags[$result['tag_id']] = array();
        }   
    }

    foreach($results->as_array() as $result)
    {
        array_push($tags[$result['tag_id']], array($result['fk_language_id'] , $result['tag_name']));   
    }
以下是预期结果:

Array ( 
  [19] => Array ( 
       [0] => Array ( 
               [0] => 1 
               [1] => test 
           ) 
       ) 
  [20] => Array ( 
       [0] => Array ( 
               [0] => 1 
               [1] => testa 
           ) 
       [1] => Array (  
               [0] => 3 
               [1] => fdfda 
           ) 
       ) 
) 
然而,这里有两个循环,我知道这并不理想。为什么这些不起作用

    $tags = array();
    foreach($results->as_array() as $key=>$result)
    {
        $tags[$result['tag_id']] .= array($result['fk_language_id'] , $result['tag_name']);
    }
在这个例子中,我得到两个空数组

Array ( [19] => Array [20] => ArrayArray ) 
甚至

    $tags = array();
    foreach($results->as_array() as $key=>$result)
    {
        if(!in_array($result['tag_id'], $tags))
        {
            $tags[$result['tag_id']] = array();
        }
        array_push($tags[$result['tag_id']], array($result['fk_language_id'] , $result['tag_name']));
    }
由于某种原因,它会用第二个数组的第二个值覆盖第二个数组的第一个值

Array ( 
  [19] => Array ( 
       [0] => Array ( 
               [0] => 1 
               [1] => test 
           ) 
       ) 
  [20] => Array ( 
      [0] => Array ( 
               [0] => 3 
               [1] => fdfda 
           ) 
       ) 
 ) 

在后两个示例中,我做错了什么?

操作符是字符串连接。数组与
+=
合并

如果我正确理解了这个问题,代码应该是这样的:

Array (
       [0] => Array (
                      [tag_id] => 19
                      [tag_translation_id] => 12
                      [fk_language_id] => 1
                      [fk_tag_id] => 19
                      [tag_name] => test
                    )
       [1] => Array (
                      [tag_id] => 20
                      [tag_translation_id] => 14
                      [fk_language_id] => 1
                      [fk_tag_id] => 20
                      [tag_name] => testa
                    )
       [2] => Array (
                      [tag_id] => 20
                      [tag_translation_id] => 15
                      [fk_language_id] => 3
                      [fk_tag_id] => 20
                      [tag_name] => fdfda
                    )
       )
$tags = array();
foreach ($results as $result)
    $tags[$result['tag_id']][] = array($result['fk_language_id'], $result['tag_name']);
不能使用.=(点相等)运算符向数组中添加值

为什么要执行$results->as_array()

简单地做:

foreach($results as $key=>$result) {

不要使用。=尝试使用[]

$tags = array();
foreach ($results as $result)
{
    if(!isset($tags[$result['tag_id']]))
        $tags[$result['tag_id']] = array();
    $tags[$result['tag_id']][] = array($result['fk_language_id'], result['tag_name']);
}
.=是连接一个字符串 +=表示包含一个数字 []是与数组关联的

希望这有帮助


编辑:注意,如果数组中不存在标记id,则它“可能”失败,因此可能值得先检查并将其设置为数组以防万一。

要回答您的问题,您的第二个方法失败,因为您使用了不正确的
=
运算符。您的第三个方法失败,因为您的
!在_array
中,check总是
false
(它检查值是否在数组中,而不是键是否已设置),并在每次迭代时覆盖数组。您只需要这样做(正如其他人提到的,在伪代码中):


as_数组似乎是$results中任何内容的一种特殊方法。你不知道$results是否是可编辑的。是的,它是一个对象上的操作。这与上一个示例大致相同,并且不起作用。这也会删除最后一个结果。记住,我需要连接多个结果。+=给了我不支持的操作数类型。您不需要连接。连接是连接两个字符串,而不是合并数组<如果您实际使用了错误的操作数,代码>+=将为您提供不受支持的操作数类型,例如,您做错了什么。检查我编辑的答案-它给出了您需要的准确结果。如果
tag\u id
不存在,它不会失败,您不需要显式创建新数组。