在PHP中创建关联数组

4

我有一个多维数组。

$shop = array( 
              array("appn1", "pub1" ,"pub2" , "pub3"),
              array("appn2", "pub1"),
              array("appn3", "pub1" ,"pub2")
            ); 

每个数组的第一项是申请号码,其余项是公开号码。我可以按如下方法获取每个数组的第一项(申请号码)和最后一项(最新公开号码):

 $index = count(array_keys($shop));
    for($i=0;$i<$index;$i++){

        $appln_nr = $shop[$i][0];
        echo $appln_nr;

        $publn_nr_index = count(array_keys($shop[$i]))-1;
        $publn_nr = $shop[$i][$publn_nr_index];
        echo $publn_nr;
   }

现在,我有每个内部数组的申请号和出版号。我想要从申请号和出版号创建一个关联数组,其中键应该是申请号,其值为出版号。谢谢。
编辑:我从$shop数组中得到的是什么?
 Array
 (
  [0] => Array
    (
        [0] => appn1
        [1] => pub1
        [2] => pub2
        [3] => pub3
    )

  [1] => Array
    (
        [0] => appn2
        [1] => pub1
    )

  [2] => Array
    (
        [0] => appn3
        [1] => pub1
        [2] => pub2
    )
)

这是我在关联数组中需要的内容。
Array(
    "appn1" => "pub3"
    "appn2" => "pub1"
    "appn3" => "pub2"
)

如何根据应用和发布编号创建关联数组? - Wearybands
从上面的数组中...你期望得到什么输出... - Baba
@Baba 请看一下我的编辑。 - Wearybands
从您定义的内容来看,一个 app_number 中似乎有多个 pub_number。您是否希望每个元素的值都是 pub_numbers 数组呢? - Nwafor
5个回答

4

终于我明白了您想要什么,谢谢您的编辑 XD:

$shop = array(
    array("appn1", "pub1" ,"pub2" , "pub3"),
    array("appn2", "pub1"),
    array("appn3", "pub1" ,"pub2")
);
$shopNew = array();

foreach($shop as $value){
    $shopNew[$value[0]] = end($value);
}

// now if you want you can replace $shop and unset $shopNew
$shop = $shopNew;
unset($shopNew);    

print_r($shop); 

输出结果如下:
Array (
  [appn1] => pub3
  [appn2] => pub1
  [appn3] => pub2
)

这是我已经在做的,现在我想将其更改为关联数组。 - Wearybands
@UmairIqbal 这是一个关联数组。除了他使用了 var_dump 而不是 print_r 来显示结果。 - Anthony Hatzopoulos
我修改了我的回答,因为一开始问题不够清晰,@UmairIqbal的评论是在修改之前的:P - aleation

1

通过使用第一个元素作为键(参见reset)和最后一个元素(参见end),您可以轻松将数组转换为新格式:

foreach($shop as $fl) {
    $v[reset($fl)] = end($fl);
}

结果就在$v里。

如果你想要转换数组,你需要同时删除每个元素:

foreach($shop as $v => $fl) {
    $shop[reset($fl)] = end($fl);
    unset($shop[$v]);
}

结果现在在$shop中。使用Unset函数可以从数组中移除。

两种情况下的输出结果如下:

array(3) {
  'appn1' =>
  string(4) "pub3"
  'appn2' =>
  string(4) "pub1"
  'appn3' =>
  string(4) "pub2"
}

1

你可以试试

$shop = array(
        array("appn1","pub1","pub2","pub3"),
        array("appn2","pub1"),
        array("appn3","pub1","pub2")
        );

$final = array();
array_map(function ($var) use(&$final) {$final[reset($var)] = end($var);}, $shop);
var_dump($final);

输出

array
  'appn1' => string 'pub3' (length=4)
  'appn2' => string 'pub1' (length=4)
  'appn3' => string 'pub2' (length=4)

0

试试这个:

 foreach($shop as $k => $v) {            
     $new_arr[$v[0]] = end($v);      
 }

它应该给你这个结果,

$new_arr = array(
      "appn1" => "pub3",
      "appn2" => "pub1",
      "appn3" => "pub2"-
);

0

你也可以像这样创建,

$arrField = [];
$arrField['id'] = '0001';
$arrField["first_name"] ='Demo Test';
print_r($arrField);

print_r($arrField) 会显示如下输出。

Array ( [id] => 0001 [first_name] => Demo Test )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接