PHP:将两个multimensioanl数组合并为一个

时间:2018-09-27 11:11:28

标签: php if-statement multidimensional-array foreach

我尝试创建一个如下所示的多维数组($list):

[
  {"uri": "http://www.example.com/1", "traverseCount": "1"},
  {"uri": "http://www.example.com/2", "traverseCount": "1"},
  {"uri": "http://www.example.com/3", "traverseCount": "1"}
]

但是,我不知道如何从以下数据中做到最好。 这两个数据源来自两个If-Else,并且尝试为每种情况创建一个多维数组。但是,最后,我想生成一个多维数组,它将两个多维数组与连续的有序键组合在一起。 (因此,在上面的示例中,http://www.example.com/1http://www.example.com/2来自第一个Else-If的结果,http://www.example.com/3来自第二个Else-If)。棘手的是,foreach中有Else-If

// Create an empty multidimentional array to accommodate 2 datasets (2 If-Else cases) below:
$traverseCount = 1;
$list = array(
  array(),
  array()
);
//This is the first data source. Say, it returns 2 URIs when doing the foreach loop:
$match = $graph->resourcesMatching('skos:exactMatch');
if (isset($match) == true && count($match) > 0){
  $graphuris = $match[0]->all('skos:exactMatch');
  echo '<b>skos:exactMatch Links: </b><br>';
  foreach ($graphuris as $uris) {
    $counter = 0;
    $list[$counter][0] = $uris->__toString();
    $list[$counter][1] = $traverseCount;
    $counter++;
    echo '<a href="'.$uris.'" target="_blank">'.$uris.'</a><br>';
  }
}
else {
  echo '<p>No skos:exactMatch found</p>';
}
//This is the second data source, whose multidimensional array should be added to the end of the previous multidimensional array 
$match2 = $graph->resourcesMatching('rdfs:seeAlso');
if (isset($match2) == true && count($match2) > 0){
  $graphuris2 = $match2[0]->all('rdfs:seeAlso');
  echo '<b>rdfs:seeAlso Links: </b><br>';
  foreach ($graphuris2 as $uris2) {
    $counter = 0;
    $list[$counter][0] = $uris2->__toString();
    $list[$counter][1] = $traverseCount;
    $counter++;
    echo '<a href="'.$uris2.'" target="_blank">'.$uris2.'</a><br>';
  }
}
else{
  echo '<p>No rdfs:seeAlso found</p><br>';
}
// $traverseCount is always 1 until here, but it needs to add 1 for the next script to run.
$traverseCount++;

2 个答案:

答案 0 :(得分:2)

它不必那么复杂。无需像这样的$counter即可添加到数组。

// Create an empty multidimentional array to accommodate 2 datasets (2 If-Else cases) below:
$traverseCount = 1;

$list = array();
//This is the first data source. Say, it returns 2 URIs when doing the foreach loop:
$match = $graph->resourcesMatching('skos:exactMatch');
if (isset($match) == true && count($match) > 0){
  $graphuris = $match[0]->all('skos:exactMatch');
  echo '<b>skos:exactMatch Links: </b><br>';
  foreach ($graphuris as $uris) {

    $list[] = array('uri'           => $uris->__toString(), 
                    'traversecount' => $traverseCount
                    );

    echo '<a href="'.$uris.'" target="_blank">'.$uris.'</a><br>';
  }
}
else {
  echo '<p>No skos:exactMatch found</p>';
}
//This is the second data source, whose multidimensional array should be added to the end of the previous multidimensional array 
$match2 = $graph->resourcesMatching('rdfs:seeAlso');
if (isset($match2) == true && count($match2) > 0){
  $graphuris2 = $match2[0]->all('rdfs:seeAlso');
  echo '<b>rdfs:seeAlso Links: </b><br>';
  foreach ($graphuris2 as $uris2) {
    $list[] = array('uri'           => $uris2->__toString(), 
                    'traversecount' => $traverseCount
                    );

    echo '<a href="'.$uris2.'" target="_blank">'.$uris2.'</a><br>';
  }
}
else{
  echo '<p>No rdfs:seeAlso found</p><br>';
}
// $traverseCount is always 1 until here, but it needs to add 1 for the next script to run.
$traverseCount++;
  

我对$traverseCount有点困惑,因为在两个循环都完成之前,它似乎不会在您的代码中更改。

答案 1 :(得分:1)

在每次迭代中,您始终将此$counter重置为0。而是将新元素附加到数组:

$list = [];

if () {
    foreach () {
        $list[] = [
            $uris->__toString(),
            $traverseCount
        ];
    }
}

这里我不使用计数器,只是使用$list[]向数组添加新元素,索引将自动递增。

$uris->__toString()$traverseCount自动设置为0和1索引


我看不到您的$traverseCount是如何变化的,因为它在开始时分配为1,仅在结尾时递增。