Php 了解多维数组的基础知识
我对在php中使用多维数组还不熟悉,我一直试图远离它们,因为它们让我感到困惑,但现在是时候好好利用它们了。我一直在试图了解它们是如何工作的,但我就是不明白 我试图做的是基于字符串比较函数填充结果,一旦找到与“项目名称”匹配的内容,我希望第一个插槽包含“项目名称”,然后我希望将优先级插槽增加1 所以当我填充完我的数组后,它将有各种不同的公司名称,每个都有各自的优先级 我无法理解如何声明和操作以下数组:Php 了解多维数组的基础知识,php,Php,我对在php中使用多维数组还不熟悉,我一直试图远离它们,因为它们让我感到困惑,但现在是时候好好利用它们了。我一直在试图了解它们是如何工作的,但我就是不明白 我试图做的是基于字符串比较函数填充结果,一旦找到与“项目名称”匹配的内容,我希望第一个插槽包含“项目名称”,然后我希望将优先级插槽增加1 所以当我填充完我的数组后,它将有各种不同的公司名称,每个都有各自的优先级 我无法理解如何声明和操作以下数组: $matches = array( 'name'=>array('somename
$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;
}
它查找该名称是否已在列表中。如果不是,则为该值设置一个数组\键
。如果它找到一个已经存在的值,它只会提高“优先级”。您的描述听起来不像多维数组。它听起来像是一个一维的键值对数组。多维数组是数组的数组。除非您的“优先级”值是数组,否则您不需要多维数组。您的描述听起来不像多维数组。它听起来像是一个一维的键值对数组。多维数组是数组的数组。除非你的“优先级”值是一个数组,否则你不需要多维数组。这不是一个使用两个不同数组的例子吗