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

Php 了解多维数组的基础知识

Php 了解多维数组的基础知识,php,Php,我对在php中使用多维数组还不熟悉,我一直试图远离它们,因为它们让我感到困惑,但现在是时候好好利用它们了。我一直在试图了解它们是如何工作的,但我就是不明白 我试图做的是基于字符串比较函数填充结果,一旦找到与“项目名称”匹配的内容,我希望第一个插槽包含“项目名称”,然后我希望将优先级插槽增加1 所以当我填充完我的数组后,它将有各种不同的公司名称,每个都有各自的优先级 我无法理解如何声明和操作以下数组: $matches = array( 'name'=>array('somename

我对在php中使用多维数组还不熟悉,我一直试图远离它们,因为它们让我感到困惑,但现在是时候好好利用它们了。我一直在试图了解它们是如何工作的,但我就是不明白

我试图做的是基于字符串比较函数填充结果,一旦找到与“项目名称”匹配的内容,我希望第一个插槽包含“项目名称”,然后我希望将优先级插槽增加1

所以当我填充完我的数组后,它将有各种不同的公司名称,每个都有各自的优先级

我无法理解如何声明和操作以下数组:

$matches = array(
    'name'=>array('somename'),
    'priority'=>array($priority_level++)
);

多维数组很容易。它们都是一个数组,其中的元素是其他数组

因此,您可以有两个单独的阵列:

$name = array('somename');
$priority = array(1);
或者,您可以有一个数组,其中包含以下两个数组作为元素:

$matches = array(
    'name' => array('somename'),
    'priority' => array(1)
);
因此,使用
$matches['name']
将与使用
$name
相同,它们都是数组,只是存储方式不同

echo $name[0]; //'somename';
echo $matches['name'][0]; //'somename';
因此,要将另一个名称添加到
$matches
数组中,可以执行以下操作:

$matches['name'][] = 'Another Name';
$matches['priority'][] = 2;
print\r($matches)将输出:

Array
(
    [name] => Array
        (
            [0] => somename
            [1] => Another Name
        )

    [priority] => Array
        (
            [0] => 1
            [1] => 2
        )

)

多维数组很容易。它们都是一个数组,其中的元素是其他数组

因此,您可以有两个单独的阵列:

$name = array('somename');
$priority = array(1);
或者,您可以有一个数组,其中包含以下两个数组作为元素:

$matches = array(
    'name' => array('somename'),
    'priority' => array(1)
);
因此,使用
$matches['name']
将与使用
$name
相同,它们都是数组,只是存储方式不同

echo $name[0]; //'somename';
echo $matches['name'][0]; //'somename';
因此,要将另一个名称添加到
$matches
数组中,可以执行以下操作:

$matches['name'][] = 'Another Name';
$matches['priority'][] = 2;
print\r($matches)将输出:

Array
(
    [name] => Array
        (
            [0] => somename
            [1] => Another Name
        )

    [priority] => Array
        (
            [0] => 1
            [1] => 2
        )

)

因此,在现有的情况下,变量$matches将指向一个键控数组,该数组的'name'元素将是一个具有1个条目'somename'的索引数组,将有一个具有值的'priority'条目,该值是一个具有1个条目=$priority\u level的索引数组

我认为,相反,你可能想要的是:

$matches[] = array(name => 'somename', $priority => $priority_level++);
这样,$matches就是一个索引数组,其中每个索引都包含一个键控数组,因此您可以将它们寻址为:


$matches[0]['name']
$matches[0]['priority']]
,这对大多数人来说更符合逻辑。

因此,在现有的情况下,变量$matches将指向一个键控数组,该数组的'name'元素将是一个带有一个条目'somename'的索引数组,将有一个“priority”条目,其值是一个索引数组,其中一个条目=$priority\u level

我认为,相反,你可能想要的是:

$matches[] = array(name => 'somename', $priority => $priority_level++);
这样,$matches就是一个索引数组,其中每个索引都包含一个键控数组,因此您可以将它们寻址为:


$matches[0]['name']
$matches[0]['priority']]
,这对大多数人来说更符合逻辑。

就像David在对这个问题的评论中说的,听起来你没有使用合适的工具来完成这项工作。尝试:

$priorities = array();
foreach($companies as $company) {
    if (!isset($priorities[$company])) { $priorities[$company] = 0; }
    $priorities[$company]++;
}

然后,您可以通过选中
$priorities['SomeCompanyName']来访问优先级

正如David在对问题的评论中所说,听起来你没有使用合适的工具来完成这项工作。尝试:

$priorities = array();
foreach($companies as $company) {
    if (!isset($priorities[$company])) { $priorities[$company] = 0; }
    $priorities[$company]++;
}

然后,您可以通过选中
$priorities['SomeCompanyName']来访问优先级

在我看来,一个更容易使用的结构应该更像这样:

$matches = array(
    array( 'name' => 'somename', 'priority' => $priority_level_for_this_match ),
    array( 'name' => 'someothername', 'priority' => $priority_level_for_that_match )
)
要填充此数组,请先创建一个空数组:

$matches = array();
然后,找到所有匹配项

$match = array( 'name' => 'somename', 'priority' => $some_priority );
要将该数组添加到匹配项中,只需将其拍打在末尾:

$matches[] = $match;
填充后,您可以轻松地对其进行迭代:

foreach($matches as $k => $v) {
    // The value in this case is also an array, and can be indexed as such
    echo( $v['name'] . ': ' . $v['priority'] . '<br>' );
}
foreach($k=>v){
//本例中的值也是一个数组,因此可以对其进行索引
echo($v['name'].:'.$v['priority'.]。
); }
您还可以根据优先级对匹配的数组进行排序:

function cmp($a, $b) {
    if($a['priority'] == $b['priority'])
        return 0;
    return ($a['priority'] < $b['priority']) ? -1 : 1;
}
usort($matches, 'cmp');
函数cmp($a,$b){
如果($a['priority']=$b['priority'])
返回0;
回报($a['priority']<$b['priority'])?-1:1;
}
usort($matches,'cmp');

(来源)

在我看来,一个更容易使用的结构应该更像这样:

$matches = array(
    array( 'name' => 'somename', 'priority' => $priority_level_for_this_match ),
    array( 'name' => 'someothername', 'priority' => $priority_level_for_that_match )
)
要填充此数组,请先创建一个空数组:

$matches = array();
然后,找到所有匹配项

$match = array( 'name' => 'somename', 'priority' => $some_priority );
要将该数组添加到匹配项中,只需将其拍打在末尾:

$matches[] = $match;
填充后,您可以轻松地对其进行迭代:

foreach($matches as $k => $v) {
    // The value in this case is also an array, and can be indexed as such
    echo( $v['name'] . ': ' . $v['priority'] . '<br>' );
}
foreach($k=>v){
//本例中的值也是一个数组,因此可以对其进行索引
echo($v['name'].:'.$v['priority'.]。
); }
您还可以根据优先级对匹配的数组进行排序:

function cmp($a, $b) {
    if($a['priority'] == $b['priority'])
        return 0;
    return ($a['priority'] < $b['priority']) ? -1 : 1;
}
usort($matches, 'cmp');
函数cmp($a,$b){
如果($a['priority']=$b['priority'])
返回0;
回报($a['priority']<$b['priority'])?-1:1;
}
usort($matches,'cmp');

(来源)

在这种情况下,这是否也是一个具有一维数组的解决方案

$matches    = array(
        'company_1' => 0,
        'company_2' => 0,
);

if (isset($matches['company_1'])) {
    ++$matches['company_1'];
} else {
    $matches['company_1'] = 1;
}

它查找该名称是否已在列表中。如果不是,则为该值设置一个
数组\键
。如果它找到一个已经存在的值,它只会提高“优先级”。

在这种情况下,这是否也是一个一维数组的解决方案

$matches    = array(
        'company_1' => 0,
        'company_2' => 0,
);

if (isset($matches['company_1'])) {
    ++$matches['company_1'];
} else {
    $matches['company_1'] = 1;
}

它查找该名称是否已在列表中。如果不是,则为该值设置一个
数组\键
。如果它找到一个已经存在的值,它只会提高“优先级”。

您的描述听起来不像多维数组。它听起来像是一个一维的键值对数组。多维数组是数组的数组。除非您的“优先级”值是数组,否则您不需要多维数组。您的描述听起来不像多维数组。它听起来像是一个一维的键值对数组。多维数组是数组的数组。除非你的“优先级”值是一个数组,否则你不需要多维数组。这不是一个使用两个不同数组的例子吗