1

I have an array in PHP and this array has some sub array
I want you to extract some child array in an array format where one of column array equals the string
like the Example


$array = array(
     array(
          "name" => "photo",
          "size" => 400
    ),
     array(
          "name" => "photo",
          "size" => 100
    ),
     array(
          "name"  => "video",
          "size" => 6500
    ),
     array(
          "name"  => "video",
          "size" => 9888
    ),
    array(
          "name"   => "sound",
          "size" => 1100
    )
);

I want to extract the array child with name equal and get a result like this


$a = array(

   array(
          "name" => "photo",
          "size" => 400
    ),
   array(
          "name" => "photo",
          "size" => 100
    )

);

$b = array(

    array(
          "name"  => "video",
          "size" => 6500
    ),
    array(
          "name"  => "video",
          "size" => 9888
    )

);

$c = array(

    array(
          "name"   => "sound",
          "size" => 1100
    )

);

mohammad13
  • 453
  • 3
  • 17

2 Answers2

2

Why not just regroup with a simple iteration:

<?php
foreach($array as $item) {
    $output[$item['name']][] = $item;
}

var_export($output);

Output:

array (
    'photo' => 
    array (
      0 => 
      array (
        'name' => 'photo',
        'size' => 400,
      ),
      1 => 
      array (
        'name' => 'photo',
        'size' => 100,
      ),
    ),
    'video' => 
    array (
      0 => 
      array (
        'name' => 'video',
        'size' => 6500,
      ),
      1 => 
      array (
        'name' => 'video',
        'size' => 9888,
      ),
    ),
    'sound' => 
    array (
      0 => 
      array (
        'name' => 'sound',
        'size' => 1100,
      ),
    ),
  )

You can then just use the new keys. Videos would be $output['videos'].

Progrock
  • 7,373
  • 1
  • 19
  • 25
1

You can use below code:

$array = array(
     array(
          "name" => "photo",
          "size" => 400
    ),
     array(
          "name" => "photo",
          "size" => 100
    ),
     array(
          "name"  => "video",
          "size" => 6500
    ),
     array(
          "name"  => "video",
          "size" => 9888
    ),
    array(
          "name"  => "do photography",
          "size" => 9999
    ),
    array(
          "name"   => "sound",
          "size" => 1100
    )
);

//Get Unique Values
$values = array_unique ( array_column( $array, 'name') ) ;

//Create empty array for unique values.
foreach( $values as $value ) {
    $value = str_replace(' ', '_', $value);
    ${$value} = array(); //Create an empty array with name like $photo, $video and $sound
}

//Loop through and populate respective array based on name
foreach( $array as $a ) {
    $name = $a['name'];
    $name = str_replace(' ', '_', $name);
    ${$name}[] = $a;
}

echo '<pre>';
print_r($photo);
print_r($video);
print_r($sound);
print_r($do_photography);

You can check the Demo

ascsoftw
  • 3,466
  • 2
  • 15
  • 23