从多个数组创建带有键的数组

3

我有一个数组,看起来像这样:

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”为空,则将其设置为100。

因此,结果数组应如下所示:

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

如何更好地实现这个功能?我一直在使用foreach循环来遍历,但我认为有更简单的方法...

4个回答

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”键中的值。 - Hommer Smith

1
你可以这样做:
$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);

这个应该按照你的要求工作。


0

你应该这样做:

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上运行代码示例


0
$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);

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