【问题标题】:Create array with keys coming from multiple arrays使用来自多个数组的键创建数组
【发布时间】:2012-11-22 14:39:32
【问题描述】:

我有一个如下所示的数组:

array(5) {
  [0]=>
  array(2) {
    ["id"]=>
    string(2) "23"
    ["my_value"]=>
    NULL
  }
  [1]=>
  array(2) {
    ["id"]=>
    string(2) "62"
    ["my_value"]=>
    NULL
  }
...

我想要一个数组,它作为键具有每个数组中键“id”的值,作为值具有“my_value”的值。但是,如果“my_value”为 NULL,我想将值设置为 100。

所以,结果数组应该是这样的:

array(5) {
      [23] => 100
      [62] => 100
...

我怎样才能干净地做到这一点?我一直在用 foreach 进行迭代,但我相信它可以做得更干净......

【问题讨论】:

    标签: php arrays foreach


    【解决方案1】:

    您可以使用array_map() 填充my_value

    $newData = array_map(function($row) {
        if ( $row['my_value'] === null ) $row['my_value'] = 100;
        return $row;
    }, $data);
    

    但是由于格式化,您已经需要一个 foreach 循环。所以试试这个:

    $newData = array();
    foreach ($data as $row) {
        $newData[$row['id']] = ($row['my_value'] === null) ? 100 : $row['my_value'];
    }
    

    【讨论】:

    • aykut 此解决方案不会更改数组的索引...我希望从每行中的其他值中获取新索引。检查我的问题,我想更改索引,以便它们可以获取每个数组的“id”键中的值。
    【解决方案2】:

    你可以这样做:

    $arrayUsers = array();//declare array
    
    $arrUser = array("id"=>"23","myvalue"=>NULL); //User 23
    $arrayUsers[$arrUser["id"]] = $arrUser; //add
    
    $arrUser = array("id"=>"62","myvalue"=>NULL); //User 62
    $arrayUsers[$arrUser["id"]] = $arrUser; //add
    
    var_dump($arrayUsers);
    

    结果是这样的:

    array(2) 
    { 
        [23]=> array(2) 
        { 
            ["id"]=> string(2) "23" 
            ["myvalue"]=> NULL 
        }
    
        [62]=> array(2) 
        { 
            ["id"]=> string(2) "62" 
            ["myvalue"]=> NULL 
        } 
    } 
    

    [编辑]

    $valueArray = array();
    
    foreach($arrayUsers as $id=>$value)
    {
        $val = ($value["myvalue"]===NULL?100:$value["myvalue"]);
        $valueArray[$id] = $val;
    }
    
    var_dump($valueArray);
    

    这应该像你想要的那样

    【讨论】:

      【解决方案3】:
      $arr = array(5 => array('id'=>23, 'myvalue'=>null),
                   1 => array('id'=>62, 'myvalue'=>null));
      
      $callback = function($v) { 
        $id = $v['id'];
        $myv = !is_null($v['myvalue']) ? $v['myvalue'] : 100;
        return array($id=>$myv);
      
      }
      $newarr = array_map($callback, $arr);
      

      【讨论】:

        【解决方案4】:

        你应该这样做:

        foreach($old_array as $value)
        $new_array[$value['id']]= ($value['my_value']!==NULL) ? $value['my_value'] : 100 ;
        

        结果将是

        array(5) {
              [23] => 100
              [62] => 100
        ...
        

        Codepad.org运行代码示例

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-31
          • 2020-06-10
          • 2021-01-31
          • 1970-01-01
          • 2019-11-25
          相关资源
          最近更新 更多