我是新手使用带有php的多维数组,我试图远离他们,因为他们让我很困惑,但现在是时候了,我把它们用得很好。我一直试图了解它们是如何工作的,我只是没有得到它。
我想要做的是基于字符串比较函数填充结果,一旦我找到一个匹配'项目名称',我希望第一个插槽包含'项目名称',然后我想将优先级槽增加1。
所以,当我完成填充阵列的时候,它会有各种不同的公司名称,每个名称都有各自的优先级......
我无法理解如何声明和操作以下数组:
$matches = array(
'name'=>array('somename'),
'priority'=>array($priority_level++)
);
答案 0 :(得分:1)
多维数组很容易。它们都是一个数组,其中的元素是其他数组。
所以,你可以有两个独立的数组:
$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
)
)
答案 1 :(得分:1)
所以,你所拥有的,你的变量$ matches将指向一个键控数组,该数组的'name'元素将是一个带有1个条目'somename'的索引数组,将有一个'priority'条目一个值,它是一个索引数组,其中一个条目= $ priority_level。
我认为,你可能想要的是:
$matches[] = array(name => 'somename', $priority => $priority_level++);
这样,$ matches是一个索引数组,每个索引都包含一个键控数组,所以你可以将它们作为:
$matches[0]['name']
和$matches[0]['priority']
,这对大多数人来说更合乎逻辑。
答案 2 :(得分:1)
在我看来,更容易使用的结构更像是这样的结构:
$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>' );
}
您还可以根据优先级对匹配的数组进行排序:
function cmp($a, $b) {
if($a['priority'] == $b['priority'])
return 0;
return ($a['priority'] < $b['priority']) ? -1 : 1;
}
usort($matches, 'cmp');
(来自this answer)
答案 3 :(得分:1)
在这种情况下,这可能也是一个单维数组的解决方案吗?
$matches = array(
'company_1' => 0,
'company_2' => 0,
);
if (isset($matches['company_1'])) {
++$matches['company_1'];
} else {
$matches['company_1'] = 1;
}
查找名称是否已在列表中。如果不是,则为此值设置array_key
。如果它找到一个已存在的值,它只会提高“优先级”。
答案 4 :(得分:0)
$matches['name'][0] --> 'somename'
$matches['priority'][0] ---> the incremented $priority_level value
答案 5 :(得分:0)
$priorities = array();
foreach($companies as $company) {
if (!isset($priorities[$company])) { $priorities[$company] = 0; }
$priorities[$company]++;
}
然后,您可以通过查看$priorities['SomeCompanyName'];
。