Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.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

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_Wordpress_Refactoring - Fatal编程技术网

PHP-单个变量中数组列表的语法

PHP-单个变量中数组列表的语法,php,arrays,wordpress,refactoring,Php,Arrays,Wordpress,Refactoring,我有一个非常复杂的数组,其中包含许多其他非常复杂的嵌套数组。为了可读性,我想将一些内部数组组分解为主变量之外的单独变量,但是我不确定在单个变量中包含多个数组的列表的正确语法是什么 在声明变量时将数组列表包装在数组中不是一个选项,因为变量稍后将插入$array变量中的包装数组中,因此数组列表需要独立,而不是插入$sub_arrays变量中的数组中 或者,将一些子数组分离到另一个.php文件中并使用include和return也将是一个选项,而不是变量?但我也不确定它的语法 分离不仅仅是为了可读性,

我有一个非常复杂的数组,其中包含许多其他非常复杂的嵌套数组。为了可读性,我想将一些内部数组组分解为主变量之外的单独变量,但是我不确定在单个变量中包含多个数组的列表的正确语法是什么

在声明变量时将数组列表包装在数组中不是一个选项,因为变量稍后将插入$array变量中的包装数组中,因此数组列表需要独立,而不是插入$sub_arrays变量中的数组中

或者,将一些子数组分离到另一个.php文件中并使用include和return也将是一个选项,而不是变量?但我也不确定它的语法

分离不仅仅是为了可读性,而且是为了防止在另一个实例中需要重用一组特定的数组


数据是WordPress块编辑器Gutenberg模板,在其他块中有许多嵌套的组和列块


在PHP中甚至可以这样做吗?

我不确定您要求的是什么,但是如果是如何创建数组变量并在以后使用它们,那么下面是一个示例。我以你在评论中链接的WordPress为例。这是分解为多个部分的模板数组。结构似乎遵循一种模式,希望这能澄清它

$templateTop = array(
    'core/paragraph'        =>  array(
        'placeholder'           =>  'Add a root-level paragraph',
    )
);

$column1 = array(
    'core/column',
    array(),
    array(
        array(
            'core/image',
            array()
        ),
    )
);

$column2 = array(
    'core/column',
    array(),
    array(
        array(
            'core/paragraph',
            array(
                'placeholder' => 'Add a inner paragraph'
            )
        ),
    )
);

$templateColumns = array(
    'core/columns',
    array(),
    array(
        $column1, $column2
    )
);

$template = array(
    $templateTop, $templateColumns
);

我不知道你要的是什么,但如果是如何创建数组变量并在以后使用它们,那么这里有一个例子。我以你在评论中链接的WordPress为例。这是分解为多个部分的模板数组。结构似乎遵循一种模式,希望这能澄清它

$templateTop = array(
    'core/paragraph'        =>  array(
        'placeholder'           =>  'Add a root-level paragraph',
    )
);

$column1 = array(
    'core/column',
    array(),
    array(
        array(
            'core/image',
            array()
        ),
    )
);

$column2 = array(
    'core/column',
    array(),
    array(
        array(
            'core/paragraph',
            array(
                'placeholder' => 'Add a inner paragraph'
            )
        ),
    )
);

$templateColumns = array(
    'core/columns',
    array(),
    array(
        $column1, $column2
    )
);

$template = array(
    $templateTop, $templateColumns
);

您可能更喜欢PHP5.4之后提供的更短的数组语法


您可能更喜欢PHP5.4之后提供的更短的数组语法

新答案:

根据下面的评论,我想我理解这个问题。我可以想出两种解决办法

第一个解决方案: 第一个很简单,但是需要PHP7.4+才能工作

您可以使用名为“倾斜”操作符的新功能。。。在这里,您可以将一个阵列解压为另一个阵列。以下是一个例子:

<?php
$sub_arrays = [array("middle" => "array"), array(), array("external"=>"array")];

$array = array(
    'template' => array(
        array(
            array(),
            array(
               array('first'=>"array"),
                ...$sub_arrays, // use it here
                array('last'=>"array")
            )
        ),
    ),
);

print_r($array);
新答案:

根据下面的评论,我想我理解这个问题。我可以想出两种解决办法

第一个解决方案: 第一个很简单,但是需要PHP7.4+才能工作

您可以使用名为“倾斜”操作符的新功能。。。在这里,您可以将一个阵列解压为另一个阵列。以下是一个例子:

<?php
$sub_arrays = [array("middle" => "array"), array(), array("external"=>"array")];

$array = array(
    'template' => array(
        array(
            array(),
            array(
               array('first'=>"array"),
                ...$sub_arrays, // use it here
                array('last'=>"array")
            )
        ),
    ),
);

print_r($array);
你能试试这个吗

<?php

$sub_arrays = array(array(), array(), array()); // no syntax error

$array = array(
    'template' => array(
        array(
            array(),
            array(
                array_merge(
                array(array()),
                $sub_arrays),
                 array(),
            )
        ),
    ),
);

print_r($array);
要使其工作,必须将外部数组与现有数组合并。现有的一个必须封装在一个数组中

您可以尝试以下方法:

<?php

$sub_arrays = array(array(), array(), array()); // no syntax error

$array = array(
    'template' => array(
        array(
            array(),
            array(
                array_merge(
                array(array()),
                $sub_arrays),
                 array(),
            )
        ),
    ),
);

print_r($array);

要使其工作,必须将外部数组与现有数组合并。现有的一个必须封装在一个数组中

我将尝试简化这个问题,并定义一些变量如下

$firstArray = $a; 
$subArrays = [$i, $j, $k]; 
$lastArray = $z;
其中,$a、$i、$j、$k和$z都是数组

我相信你想要达到的是

$result = [$a, $i, $j, $k, $z]
不引用变量$a、$i、$j、$k或$z

这可以通过使用array_merge来实现,前提是数组不与重复键关联

$result = array_merge([$firstArray], $subArrays, [$lastArray]);
这相当于

$result = array_merge([$a], [$i, $j, $k], [$z]);
通过将$firstArray和$lastArray包装在它们自己的数组中,在将它们组合到一个数组中之前,将它们置于与$Subarray相同的嵌套级别

将所有这些应用于原始问题,并使用更长的语法,会导致

$sub_arrays = array(array(), array(), array()); // Wrapped

$array = array(
    'template' => array(
        array(
            array(),
            array_merge(
                array(array()), // Wrapped
                $sub_arrays,
                array(array()), // Wrapped
            ),
        ),
    ),
);

我将尝试简化这个问题,并定义一些变量如下

$firstArray = $a; 
$subArrays = [$i, $j, $k]; 
$lastArray = $z;
其中,$a、$i、$j、$k和$z都是数组

我相信你想要达到的是

$result = [$a, $i, $j, $k, $z]
不引用变量$a、$i、$j、$k或$z

这可以通过使用array_merge来实现,前提是数组不与重复键关联

$result = array_merge([$firstArray], $subArrays, [$lastArray]);
这相当于

$result = array_merge([$a], [$i, $j, $k], [$z]);
通过将$firstArray和$lastArray包装在它们自己的数组中,在将它们组合到一个数组中之前,将它们置于与$Subarray相同的嵌套级别

将所有这些应用于原始问题,并使用更长的语法,会导致

$sub_arrays = array(array(), array(), array()); // Wrapped

$array = array(
    'template' => array(
        array(
            array(),
            array_merge(
                array(array()), // Wrapped
                $sub_arrays,
                array(array()), // Wrapped
            ),
        ),
    ),
);

可读性是主观的,数据是如何输入的,还是硬编码的?更具体地说,您是在询问正确的数组语法还是如何包含其他文件?本例是一个简化的例子。数据将被硬编码,但由于所讨论的3个数组中也包含一大堆其他数组,因此实际情况变得无法读取。数据是一个WordPress块编辑器模板,在其他块中有许多嵌套的组和列块。创建类并扩展ArrayObject是一种选择吗?可读性是主观的,数据是如何输入的,还是硬编码的?关于数组,你问得更具体一些

语法或如何包含其他文件?示例是简化/简化的情况。数据将被硬编码,但由于所讨论的3个数组中也包含一大堆其他数组,因此实际情况变得无法读取。数据是一个WordPress块编辑器模板,在其他块中有许多嵌套的组和列块。创建一个类并扩展ArrayObject会是一种选择吗?我已经知道如何将每个变量放入一个数组,但是如果我想将两个数组放入一个变量或3个数组,如我的示例中所示。。。或4,或5,即不创建$column1,$column2-只需有一个$columns变量,该变量将同时包含$column1和$column2。我已经知道如何将每个变量放入1个数组,但如果我想将2个数组放入1个变量或3个数组,如我的示例中所示。。。或4,或5,即不创建$column1,$column2-只需有一个$columns变量,该变量将同时包含$column1和$column2。感谢您介绍我使用list,但这不是我想要的,因为即使使用list,我仍然需要为每个子数组使用一个单独的变量。我不希望$a、$b和$c每个都包含一个数组,而只希望$sub_数组包含$a、$b和$c。如果我想要单独的变量,我就不需要列表,因为我可以声明我的子数组,比如$a=array$b=阵列;我需要像$sub_array=array,array,array这样的东西$在包含$sub_数组之前和之后,sub_数组将与其他数组一起插入$array中,如示例中所示。用例是使用register_post_type注册WordPress自定义post类型,并在register_post_type函数中声明块编辑器模板。主要的$array是$args中的'template'=>数组,而$sub_数组中的数组是单个块,即数组'core/image'。我想直接在“template”=>数组中声明一些块,但我想包括一些来自外部的块。我想我现在明白这个问题了。请看我更新的答案。是的,非常感谢。这个操作符似乎正在做我想要的事情,所有3个插入的+2个现有子数组将位于同一级别。遗憾的是,PHP7.4仍处于RC阶段,可能需要一段时间才能被托管提供商采用,并在现实世界中实际可用。不过,对你的答案稍加更正。。。似乎在PHP中被称为spread运算符,在其他一些语言中被称为splat运算符,而不是Slate运算符,因为该名称在任何地方都不会显示任何结果。感谢您介绍我使用list,但这不是我想要的,因为即使使用list,我仍然需要为每个子数组使用单独的变量。我不希望$a、$b和$c每个都包含一个数组,而只希望$sub_数组包含$a、$b和$c。如果我想要单独的变量,我就不需要列表,因为我可以声明我的子数组,比如$a=array$b=阵列;我需要像$sub_array=array,array,array这样的东西$在包含$sub_数组之前和之后,sub_数组将与其他数组一起插入$array中,如示例中所示。用例是使用register_post_type注册WordPress自定义post类型,并在register_post_type函数中声明块编辑器模板。主要的$array是$args中的'template'=>数组,而$sub_数组中的数组是单个块,即数组'core/image'。我想直接在“template”=>数组中声明一些块,但我想包括一些来自外部的块。我想我现在明白这个问题了。请看我更新的答案。是的,非常感谢。这个操作符似乎正在做我想要的事情,所有3个插入的+2个现有子数组将位于同一级别。遗憾的是,PHP7.4仍处于RC阶段,可能需要一段时间才能被托管提供商采用,并在现实世界中实际可用。不过,对你的答案稍加更正。。。似乎在PHP中被称为spread运算符,在其他一些语言中被称为splat运算符,而不是Slide运算符,因为该名称在任何地方都不会显示任何结果。感谢您扩展/改进Florent使用array_merge的上述答案,现在我更好地理解了这个想法,所有的数组都必须被包装,才能处于同一个级别。使用您的示例,输出将等效于spread运算符,但实际上可以在PHP上工作。欢迎使用!是的,这是一个有点棘手的问题,开始传播:感谢你扩展/改进了Florent在上面使用array_merge的回答,现在我明白了什么是更好的想法,所有的数组都必须包装才能处于同一水平。使用您的示例,输出将等效于spread运算符,但实际上可以在PHP上工作。欢迎使用!是的,这是一个有点棘手的问题,让传播: